{
  "id": "76fb4cf1010b8e037c207dc4cab1239d",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.12",
  "solcLongVersion": "0.6.12+commit.27d51765",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/flat/SushiSwapMultiExactSwapper.sol": {
        "content": "// File contracts/swappers/SushiSwapMultiExactSwapper.sol\n// SPDX-License-Identifier: GPL-3.0\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\n// solhint-disable avoid-low-level-calls\n\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\n// License-Identifier: MIT\ninterface IERC20 {\n\n}\n\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\n// License-Identifier: MIT\n\nlibrary BoringERC20 {\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\n\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\n    /// Reverts on a failed transfer.\n    /// @param token The address of the ERC-20 token.\n    /// @param to Transfer tokens to.\n    /// @param amount The token amount.\n    function safeTransfer(\n        IERC20 token,\n        address to,\n        uint256 amount\n    ) internal {\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \"BoringERC20: Transfer failed\");\n    }\n}\n\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\n// License-Identifier: MIT\n\n/// @notice A library for performing overflow-/underflow-safe math,\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\nlibrary BoringMath {\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\n        require((c = a + b) >= b, \"BoringMath: Add Overflow\");\n    }\n\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\n        require((c = a - b) <= a, \"BoringMath: Underflow\");\n    }\n\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\n        require(b == 0 || (c = a * b) / b == a, \"BoringMath: Mul Overflow\");\n    }\n}\n\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\n// License-Identifier: GPL-3.0\n\ninterface IUniswapV2Pair {\n    function getReserves()\n        external\n        view\n        returns (\n            uint112 reserve0,\n            uint112 reserve1,\n            uint32 blockTimestampLast\n        );\n\n    function swap(\n        uint256 amount0Out,\n        uint256 amount1Out,\n        address to,\n        bytes calldata data\n    ) external;\n}\n\n// File contracts/libraries/UniswapV2Library.sol\n// License-Identifier: GPL-3.0\n\nlibrary UniswapV2Library {\n    using BoringMath for uint256;\n\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\n        require(tokenA != tokenB, \"UniswapV2Library: IDENTICAL_ADDRESSES\");\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\n        require(token0 != address(0), \"UniswapV2Library: ZERO_ADDRESS\");\n    }\n\n    // calculates the CREATE2 address for a pair without making any external calls\n    function pairFor(\n        address factory,\n        address tokenA,\n        address tokenB,\n        bytes32 pairCodeHash\n    ) internal pure returns (address pair) {\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\n        pair = address(\n            uint256(\n                keccak256(\n                    abi.encodePacked(\n                        hex\"ff\",\n                        factory,\n                        keccak256(abi.encodePacked(token0, token1)),\n                        pairCodeHash // init code hash\n                    )\n                )\n            )\n        );\n    }\n\n    // fetches and sorts the reserves for a pair\n    function getReserves(\n        address factory,\n        address tokenA,\n        address tokenB,\n        bytes32 pairCodeHash\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\n        (address token0, ) = sortTokens(tokenA, tokenB);\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\n    }\n    \n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\n    function getAmountOut(\n        uint256 amountIn,\n        uint256 reserveIn,\n        uint256 reserveOut\n    ) internal pure returns (uint256 amountOut) {\n        require(amountIn > 0, \"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\");\n        require(reserveIn > 0 && reserveOut > 0, \"UniswapV2Library: INSUFFICIENT_LIQUIDITY\");\n        uint256 amountInWithFee = amountIn.mul(997);\n        uint256 numerator = amountInWithFee.mul(reserveOut);\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\n        amountOut = numerator / denominator;\n    }\n\n    // performs chained getAmountOut calculations on any number of pairs\n    function getAmountsOut(\n        address factory,\n        uint256 amountIn,\n        address[] memory path,\n        bytes32 pairCodeHash\n    ) internal view returns (uint256[] memory amounts) {\n        require(path.length >= 2, \"UniswapV2Library: INVALID_PATH\");\n        amounts = new uint256[](path.length);\n        amounts[0] = amountIn;\n        for (uint256 i; i < path.length - 1; i++) {\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\n        }\n    }\n\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\n        uint denominator = reserveOut.sub(amountOut).mul(997);\n        amountIn = (numerator / denominator).add(1);\n    }\n    \n    // performs chained getAmountIn calculations on any number of pairs\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\n        amounts = new uint[](path.length);\n        amounts[amounts.length - 1] = amountOut;\n        for (uint i = path.length - 1; i > 0; i--) {\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\n        }\n    }\n}\n\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\n// License-Identifier: MIT\n\ninterface IBentoBoxV1 {\n    function deposit(\n        IERC20 token_,\n        address from,\n        address to,\n        uint256 amount,\n        uint256 share\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\n\n    function toAmount(\n        IERC20 token,\n        uint256 share,\n        bool roundUp\n    ) external view returns (uint256 amount);\n    \n    function toShare(\n        IERC20 token,\n        uint256 amount,\n        bool roundUp\n    ) external view returns (uint256 share);\n    \n    function transfer(\n        IERC20 token,\n        address from,\n        address to,\n        uint256 share\n    ) external;\n\n    function withdraw(\n        IERC20 token_,\n        address from,\n        address to,\n        uint256 amount,\n        uint256 share\n    ) external returns (uint256 amountOut, uint256 shareOut);\n}\n\n// File contracts/swappers/SushiSwapMultiSwapper.sol\n// License-Identifier: GPL-3.0\n\ncontract SushiSwapMultiExactSwapper {\n    using BoringERC20 for IERC20;\n    using BoringMath for uint256;\n\n    address private immutable factory;\n    IBentoBoxV1 private immutable bentoBox;\n    bytes32 private immutable pairCodeHash;\n\n    constructor(\n        address _factory,\n        IBentoBoxV1 _bentoBox,\n        bytes32 _pairCodeHash\n    ) public {\n        factory = _factory;\n        bentoBox = _bentoBox;\n        pairCodeHash = _pairCodeHash;\n    }\n\n    function getInputAmount(\n        IERC20 tokenOut,\n        address[] memory path,\n        uint256 shareOut\n    ) public view returns (uint256 amountIn) {\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\n        amountIn = amounts[0];\n    }\n\n    function swap(\n        IERC20 tokenIn,\n        IERC20 tokenOut,\n        uint256 amountMaxIn,\n        address path1,\n        address path2,\n        address to,\n        uint256 shareIn,\n        uint256 shareOut\n    ) external returns (uint256) {\n        address[] memory path;\n        if (path2 == address(0)) {\n            if (path1 == address(0)) {\n                path = new address[](2);\n                path[1] = address(tokenOut);\n            } else {\n                path = new address[](3);\n                path[1] = path1;\n                path[2] = address(tokenOut);\n            }\n        } else {\n            path = new address[](4);\n            path[1] = path1;\n            path[2] = path2;\n            path[3] = address(tokenOut);\n        }\n        path[0] = address(tokenIn);\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\n        require(amountIn <= amountMaxIn, \"insufficient-amount-in\");\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\n        bentoBox.transfer(tokenIn, address(this), to, difference);\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\n        return (difference);\n    }\n\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\n    // Returns the amount of the final token\n    function _swapExactTokensForTokens(\n        uint256 amountIn,\n        address[] memory path,\n        address to\n    ) internal {\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\n        _swap(amounts, path, to);\n    }\n\n    // requires the initial amount to have already been sent to the first pair\n    function _swap(\n        uint256[] memory amounts,\n        address[] memory path,\n        address _to\n    ) internal virtual {\n        for (uint256 i; i < path.length - 1; i++) {\n            (address input, address output) = (path[i], path[i + 1]);\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\n            uint256 amountOut = amounts[i + 1];\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\n        }\n    }\n}"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 350
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "devdoc",
            "userdoc",
            "storageLayout",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/flat/SushiSwapMultiExactSwapper.sol": {
        "BoringERC20": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b93a38ff4d47d84ee823a4395fdffc01ea604f75524dc3e431bdd03c65e95a464736f6c634300060c0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 SWAP4 LOG3 DUP16 DELEGATECALL 0xD4 PUSH30 0x84EE823A4395FDFFC01EA604F75524DC3E431BDD03C65E95A464736F6C63 NUMBER STOP MOD 0xC STOP CALLER ",
              "sourceMap": "431:709:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b93a38ff4d47d84ee823a4395fdffc01ea604f75524dc3e431bdd03c65e95a464736f6c634300060c0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 SWAP4 LOG3 DUP16 DELEGATECALL 0xD4 PUSH30 0x84EE823A4395FDFFC01EA604F75524DC3E431BDD03C65E95A464736F6C63 NUMBER STOP MOD 0xC STOP CALLER ",
              "sourceMap": "431:709:0:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "safeTransfer(contract IERC20,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"BoringERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "BoringMath": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a859c993e2cee5d23debf508892a7bdc2b51100a45085d3fb30f5127728eb31d64736f6c634300060c0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 MSIZE 0xC9 SWAP4 0xE2 0xCE 0xE5 0xD2 RETURNDATASIZE 0xEB CREATE2 ADDMOD DUP10 0x2A PUSH28 0xDC2B51100A45085D3FB30F5127728EB31D64736F6C634300060C0033 ",
              "sourceMap": "1401:467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a859c993e2cee5d23debf508892a7bdc2b51100a45085d3fb30f5127728eb31d64736f6c634300060c0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 MSIZE 0xC9 SWAP4 0xE2 0xCE 0xE5 0xD2 RETURNDATASIZE 0xEB CREATE2 ADDMOD DUP10 0x2A PUSH28 0xDC2B51100A45085D3FB30F5127728EB31D64736F6C634300060C0033 ",
              "sourceMap": "1401:467:0:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "add(uint256,uint256)": "infinite",
                "mul(uint256,uint256)": "infinite",
                "sub(uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library for performing overflow-/underflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"BoringMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "A library for performing overflow-/underflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).",
            "version": 1
          }
        },
        "IBentoBoxV1": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token_",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "roundUp",
                  "type": "bool"
                }
              ],
              "name": "toAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "roundUp",
                  "type": "bool"
                }
              ],
              "name": "toShare",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "token_",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "share",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "deposit(address,address,address,uint256,uint256)": "02b9446c",
              "toAmount(address,uint256,bool)": "56623118",
              "toShare(address,uint256,bool)": "da5139ca",
              "transfer(address,address,address,uint256)": "f18d03cc",
              "withdraw(address,address,address,uint256,uint256)": "97da6d30"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"roundUp\",\"type\":\"bool\"}],\"name\":\"toAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"roundUp\",\"type\":\"bool\"}],\"name\":\"toShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"share\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"IBentoBoxV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "IERC20": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "IUniswapV2Pair": {
          "abi": [
            {
              "inputs": [],
              "name": "getReserves",
              "outputs": [
                {
                  "internalType": "uint112",
                  "name": "reserve0",
                  "type": "uint112"
                },
                {
                  "internalType": "uint112",
                  "name": "reserve1",
                  "type": "uint112"
                },
                {
                  "internalType": "uint32",
                  "name": "blockTimestampLast",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Out",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Out",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "getReserves()": "0902f1ac",
              "swap(uint256,uint256,address,bytes)": "022c0d9f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"blockTimestampLast\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"IUniswapV2Pair\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "SushiSwapMultiExactSwapper": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                },
                {
                  "internalType": "contract IBentoBoxV1",
                  "name": "_bentoBox",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "_pairCodeHash",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "path",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256",
                  "name": "shareOut",
                  "type": "uint256"
                }
              ],
              "name": "getInputAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "tokenIn",
                  "type": "address"
                },
                {
                  "internalType": "contract IERC20",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amountMaxIn",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "path1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "path2",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "shareIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "shareOut",
                  "type": "uint256"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60e060405234801561001057600080fd5b5060405161162538038061162583398101604081905261002f91610052565b6001600160601b0319606093841b81166080529190921b1660a05260c0526100ac565b600080600060608486031215610066578283fd5b835161007181610094565b602085015190935061008281610094565b80925050604084015190509250925092565b6001600160a01b03811681146100a957600080fd5b50565b60805160601c60a05160601c60c05161150c6101196000398061014752806104c552806108a55280610cf3525080607c528061039c5280610446528061056652806105a1528061061a525080610124528061047a52806108825280610c9a5280610cd0525061150c6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631e2e4ebc1461003b5780633087d74214610064575b600080fd5b61004e610049366004610eb8565b610077565b60405161005b9190611400565b60405180910390f35b61004e610072366004610f80565b61018d565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356623118868560016040518463ffffffff1660e01b81526004016100cb9392919061116f565b60206040518083038186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b919061105f565b9050606061016b7f000000000000000000000000000000000000000000000000000000000000000083877f00000000000000000000000000000000000000000000000000000000000000006106c5565b90508060008151811061017a57fe5b6020026020010151925050509392505050565b600060606001600160a01b038616610283576001600160a01b03871661020057604080516002808252606082018352909160208301908036833701905050905088816001815181106101db57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061027e565b604080516003808252608082019092529060208201606080368337019050509050868160018151811061022f57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050888160028151811061025d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b61032f565b60408051600480825260a08201909252906020820160808036833701905050905086816001815181106102b257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505085816002815181106102e057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050888160038151811061030e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b898160008151811061033d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600061036a8a8386610077565b9050888111156103955760405162461bcd60e51b815260040161038c906111c9565b60405180910390fd5b60006104427f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663da5139ca8e8560016040518463ffffffff1660e01b81526004016103eb9392919061116f565b60206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043b919061105f565b87906107df565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308d306104e97f0000000000000000000000000000000000000000000000000000000000000000886000815181106104a657fe5b6020026020010151896001815181106104bb57fe5b60200260200101517f0000000000000000000000000000000000000000000000000000000000000000610808565b8660006040518663ffffffff1660e01b815260040161050c959493929190611111565b6040805180830381600087803b15801561052557600080fd5b505af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190611077565b505061058a82847f000000000000000000000000000000000000000000000000000000000000000061087b565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc906105dc908f9030908c908790600401611145565b600060405180830381600087803b1580156105f657600080fd5b505af115801561060a573d6000803e3d6000fd5b505060405162ae511b60e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811693506302b9446c9250610662918f91908c906000908c90600401611111565b6040805180830381600087803b15801561067b57600080fd5b505af115801561068f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b39190611077565b50909c9b505050505050505050505050565b60606002835110156106e95760405162461bcd60e51b815260040161038c90611291565b825167ffffffffffffffff8111801561070157600080fd5b5060405190808252806020026020018201604052801561072b578160200160208202803683370190505b509050838160018351038151811061073f57fe5b60209081029190910101528251600019015b80156107d65760008061078f8887600186038151811061076d57fe5b602002602001015188868151811061078157fe5b6020026020010151886108dc565b915091506107b18484815181106107a257fe5b602002602001015183836109c5565b8460018503815181106107c057fe5b6020908102919091010152505060001901610751565b50949350505050565b808203828111156108025760405162461bcd60e51b815260040161038c90611192565b92915050565b60008060006108178686610a5f565b9150915086828260405160200161082f92919061109a565b6040516020818303038152906040528051906020012085604051602001610858939291906110c1565b60408051601f198184030181529190528051602090910120979650505050505050565b60606108c97f000000000000000000000000000000000000000000000000000000000000000085857f0000000000000000000000000000000000000000000000000000000000000000610ae9565b90506108d6818484610beb565b50505050565b60008060006108eb8686610a5f565b5090506000806108fd89898989610808565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561093557600080fd5b505afa158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d919061100b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316886001600160a01b0316146109b25780826109b5565b81815b909a909950975050505050505050565b60008084116109e65760405162461bcd60e51b815260040161038c90611200565b6000831180156109f65750600082115b610a125760405162461bcd60e51b815260040161038c906112ff565b6000610a2a6103e8610a248688610db9565b90610db9565b90506000610a3e6103e5610a2486896107df565b9050610a556001828481610a4e57fe5b0490610df0565b9695505050505050565b600080826001600160a01b0316846001600160a01b03161415610a945760405162461bcd60e51b815260040161038c9061124c565b826001600160a01b0316846001600160a01b031610610ab4578284610ab7565b83835b90925090506001600160a01b038216610ae25760405162461bcd60e51b815260040161038c90611347565b9250929050565b6060600283511015610b0d5760405162461bcd60e51b815260040161038c90611291565b825167ffffffffffffffff81118015610b2557600080fd5b50604051908082528060200260200182016040528015610b4f578160200160208202803683370190505b5090508381600081518110610b6057fe5b60200260200101818152505060005b60018451038110156107d657600080610ba588878581518110610b8e57fe5b602002602001015188866001018151811061078157fe5b91509150610bc7848481518110610bb857fe5b60200260200101518383610e13565b848460010181518110610bd657fe5b60209081029190910101525050600101610b6f565b60005b60018351038110156108d657600080848381518110610c0957fe5b6020026020010151858460010181518110610c2057fe5b6020026020010151915091506000610c388383610a5f565b5090506000878560010181518110610c4c57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614610c7a57826000610c7e565b6000835b91509150600060028a51038810610c955788610cc9565b610cc97f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106104bb57fe5b9050610d177f000000000000000000000000000000000000000000000000000000000000000088887f0000000000000000000000000000000000000000000000000000000000000000610808565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015610d54576020820181803683370190505b506040518563ffffffff1660e01b8152600401610d749493929190611409565b600060405180830381600087803b158015610d8e57600080fd5b505af1158015610da2573d6000803e3d6000fd5b505060019099019850610bee975050505050505050565b6000811580610dd457505080820282828281610dd157fe5b04145b6108025760405162461bcd60e51b815260040161038c906113c9565b818101818110156108025760405162461bcd60e51b815260040161038c906112c8565b6000808411610e345760405162461bcd60e51b815260040161038c9061137e565b600083118015610e445750600082115b610e605760405162461bcd60e51b815260040161038c906112ff565b6000610e6e856103e5610db9565b90506000610e7c8285610db9565b90506000610e9683610e90886103e8610db9565b90610df0565b9050808281610ea157fe5b04979650505050505050565b8035610802816114a2565b600080600060608486031215610ecc578283fd5b8335610ed7816114a2565b925060208481013567ffffffffffffffff80821115610ef4578485fd5b818701915087601f830112610f07578485fd5b813581811115610f15578586fd5b8381029150610f2584830161147b565b8181528481019084860184860187018c1015610f3f578889fd5b8895505b83861015610f6957610f558c82610ead565b835260019590950194918601918601610f43565b50979a979950505050604095909501359450505050565b600080600080600080600080610100898b031215610f9c578384fd5b8835610fa7816114a2565b97506020890135610fb7816114a2565b9650604089013595506060890135610fce816114a2565b94506080890135610fde816114a2565b935060a0890135610fee816114a2565b979a969950949793969295929450505060c08201359160e0013590565b60008060006060848603121561101f578283fd5b835161102a816114ba565b602085015190935061103b816114ba565b604085015190925063ffffffff81168114611054578182fd5b809150509250925092565b600060208284031215611070578081fd5b5051919050565b60008060408385031215611089578182fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b7fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b60208082526016908201527f696e73756666696369656e742d616d6f756e742d696e00000000000000000000604082015260600190565b6020808252602c908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4f60408201526b155514155517d05353d5539560a21b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b90815260200190565b6000858252602085818401526001600160a01b0385166040840152608060608401528351806080850152825b818110156114515785810183015185820160a001528201611435565b81811115611462578360a083870101525b50601f01601f19169290920160a0019695505050505050565b60405181810167ffffffffffffffff8111828210171561149a57600080fd5b604052919050565b6001600160a01b03811681146114b757600080fd5b50565b6dffffffffffffffffffffffffffff811681146114b757600080fdfea2646970667358221220bc3041e300fb4bf563001ae7a3e1fdb0450a2e738d0fad4fb6785c0651c000d564736f6c634300060c0033",
              "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1625 CODESIZE SUB DUP1 PUSH2 0x1625 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SWAP1 SWAP3 SHL AND PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH2 0xAC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x66 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x71 DUP2 PUSH2 0x94 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x82 DUP2 PUSH2 0x94 JUMP JUMPDEST DUP1 SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH2 0x150C PUSH2 0x119 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x147 MSTORE DUP1 PUSH2 0x4C5 MSTORE DUP1 PUSH2 0x8A5 MSTORE DUP1 PUSH2 0xCF3 MSTORE POP DUP1 PUSH1 0x7C MSTORE DUP1 PUSH2 0x39C MSTORE DUP1 PUSH2 0x446 MSTORE DUP1 PUSH2 0x566 MSTORE DUP1 PUSH2 0x5A1 MSTORE DUP1 PUSH2 0x61A MSTORE POP DUP1 PUSH2 0x124 MSTORE DUP1 PUSH2 0x47A MSTORE DUP1 PUSH2 0x882 MSTORE DUP1 PUSH2 0xC9A MSTORE DUP1 PUSH2 0xCD0 MSTORE POP PUSH2 0x150C PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1E2E4EBC EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x3087D742 EQ PUSH2 0x64 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x49 CALLDATASIZE PUSH1 0x4 PUSH2 0xEB8 JUMP JUMPDEST PUSH2 0x77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0xF80 JUMP JUMPDEST PUSH2 0x18D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56623118 DUP7 DUP6 PUSH1 0x1 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x116F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11B SWAP2 SWAP1 PUSH2 0x105F JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x16B PUSH32 0x0 DUP4 DUP8 PUSH32 0x0 PUSH2 0x6C5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x17A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x283 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH2 0x200 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP1 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP9 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1DB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x27E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x3 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x60 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x22F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP9 DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x25D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP6 DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x2E0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP9 DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x30E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP JUMPDEST DUP10 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x33D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x36A DUP11 DUP4 DUP7 PUSH2 0x77 JUMP JUMPDEST SWAP1 POP DUP9 DUP2 GT ISZERO PUSH2 0x395 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x11C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x442 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDA5139CA DUP15 DUP6 PUSH1 0x1 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x116F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x417 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x43B SWAP2 SWAP1 PUSH2 0x105F JUMP JUMPDEST DUP8 SWAP1 PUSH2 0x7DF JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x97DA6D30 DUP14 ADDRESS PUSH2 0x4E9 PUSH32 0x0 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4A6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4BB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH32 0x0 PUSH2 0x808 JUMP JUMPDEST DUP7 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x50C SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x539 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x55D SWAP2 SWAP1 PUSH2 0x1077 JUMP JUMPDEST POP POP PUSH2 0x58A DUP3 DUP5 PUSH32 0x0 PUSH2 0x87B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3C6340F3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xF18D03CC SWAP1 PUSH2 0x5DC SWAP1 DUP16 SWAP1 ADDRESS SWAP1 DUP13 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1145 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x60A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH3 0xAE511B PUSH1 0xE2 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 POP PUSH4 0x2B9446C SWAP3 POP PUSH2 0x662 SWAP2 DUP16 SWAP2 SWAP1 DUP13 SWAP1 PUSH1 0x0 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x68F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6B3 SWAP2 SWAP1 PUSH2 0x1077 JUMP JUMPDEST POP SWAP1 SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP4 MLOAD LT ISZERO PUSH2 0x6E9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1291 JUMP JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x72B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 DUP2 PUSH1 0x1 DUP4 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x73F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP3 MLOAD PUSH1 0x0 NOT ADD JUMPDEST DUP1 ISZERO PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 PUSH2 0x78F DUP9 DUP8 PUSH1 0x1 DUP7 SUB DUP2 MLOAD DUP2 LT PUSH2 0x76D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x781 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x8DC JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x7B1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x7A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0x9C5 JUMP JUMPDEST DUP5 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT PUSH2 0x7C0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x0 NOT ADD PUSH2 0x751 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1192 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x817 DUP7 DUP7 PUSH2 0xA5F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP7 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x82F SWAP3 SWAP2 SWAP1 PUSH2 0x109A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x858 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x8C9 PUSH32 0x0 DUP6 DUP6 PUSH32 0x0 PUSH2 0xAE9 JUMP JUMPDEST SWAP1 POP PUSH2 0x8D6 DUP2 DUP5 DUP5 PUSH2 0xBEB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x8EB DUP7 DUP7 PUSH2 0xA5F JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x8FD DUP10 DUP10 DUP10 DUP10 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x949 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x96D SWAP2 SWAP1 PUSH2 0x100B JUMP JUMPDEST POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x9B2 JUMPI DUP1 DUP3 PUSH2 0x9B5 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP11 SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x9E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1200 JUMP JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x9F6 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0xA12 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x12FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2A PUSH2 0x3E8 PUSH2 0xA24 DUP7 DUP9 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA3E PUSH2 0x3E5 PUSH2 0xA24 DUP7 DUP10 PUSH2 0x7DF JUMP JUMPDEST SWAP1 POP PUSH2 0xA55 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0xA4E JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0xDF0 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xA94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x124C JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xAB4 JUMPI DUP3 DUP5 PUSH2 0xAB7 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1347 JUMP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP4 MLOAD LT ISZERO PUSH2 0xB0D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1291 JUMP JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB4F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB60 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP5 MLOAD SUB DUP2 LT ISZERO PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 PUSH2 0xBA5 DUP9 DUP8 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xB8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP7 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x781 JUMPI INVALID JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xBC7 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBB8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0xE13 JUMP JUMPDEST DUP5 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xBD6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB6F JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP4 MLOAD SUB DUP2 LT ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x0 DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC09 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xC20 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0xC38 DUP4 DUP4 PUSH2 0xA5F JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP8 DUP6 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xC4C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xC7A JUMPI DUP3 PUSH1 0x0 PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x2 DUP11 MLOAD SUB DUP9 LT PUSH2 0xC95 JUMPI DUP9 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0xCC9 PUSH32 0x0 DUP8 DUP13 DUP12 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x4BB JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xD17 PUSH32 0x0 DUP9 DUP9 PUSH32 0x0 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP5 DUP5 DUP5 PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD54 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD74 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1409 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDA2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP10 ADD SWAP9 POP PUSH2 0xBEE SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xDD4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xDD1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x13C9 JUMP JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x12C8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0xE34 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x137E JUMP JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0xE44 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0xE60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x12FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE6E DUP6 PUSH2 0x3E5 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE7C DUP3 DUP6 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE96 DUP4 PUSH2 0xE90 DUP9 PUSH2 0x3E8 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 PUSH2 0xDF0 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0xEA1 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x802 DUP2 PUSH2 0x14A2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xECC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xED7 DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEF4 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xF07 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xF15 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP4 DUP2 MUL SWAP2 POP PUSH2 0xF25 DUP5 DUP4 ADD PUSH2 0x147B JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP5 DUP7 ADD DUP5 DUP7 ADD DUP8 ADD DUP13 LT ISZERO PUSH2 0xF3F JUMPI DUP9 DUP10 REVERT JUMPDEST DUP9 SWAP6 POP JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0xF69 JUMPI PUSH2 0xF55 DUP13 DUP3 PUSH2 0xEAD JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0xF43 JUMP JUMPDEST POP SWAP8 SWAP11 SWAP8 SWAP10 POP POP POP POP PUSH1 0x40 SWAP6 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0xF9C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0xFA7 DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0xFB7 DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0xFCE DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH2 0xFDE DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH2 0xFEE DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0xC0 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0xE0 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x101F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x102A DUP2 PUSH2 0x14BA JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x103B DUP2 PUSH2 0x14BA JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1054 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1070 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1089 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND DUP3 MSTORE SWAP2 SWAP1 SWAP3 SHL AND PUSH1 0x14 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 DUP5 ADD MSTORE PUSH1 0x15 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x35 DUP3 ADD MSTORE PUSH1 0x55 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 MSTORE SWAP4 DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE SWAP2 SWAP1 SWAP4 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20556E646572666C6F770000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x696E73756666696369656E742D616D6F756E742D696E00000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E53554646494349454E545F4F PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x155514155517D05353D55395 PUSH1 0xA2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A204944454E544943414C5F41444452 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x4553534553 PUSH1 0xD8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E56414C49445F504154480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E53554646494349454E545F4C PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x4951554944495459 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A205A45524F5F414444524553530000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E53554646494349454E545F49 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x1394155517D05353D55395 PUSH1 0xAA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE PUSH1 0x20 DUP6 DUP2 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x80 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1451 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0xA0 ADD MSTORE DUP3 ADD PUSH2 0x1435 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1462 JUMPI DUP4 PUSH1 0xA0 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0xA0 ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x149A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x14B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x14B7 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC ADDRESS COINBASE 0xE3 STOP 0xFB 0x4B CREATE2 PUSH4 0x1AE7A3 0xE1 REVERT 0xB0 GASLIMIT EXP 0x2E PUSH20 0x8D0FAD4FB6785C0651C000D564736F6C63430006 0xC STOP CALLER ",
              "sourceMap": "7752:3501:0:-:0;;;7991:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;8114:18:0;;;;;;;;8142:20;;;;;;;8172:28;;7752:3501;;466:573:-1;;;;634:2;622:9;613:7;609:23;605:32;602:2;;;-1:-1;;640:12;602:2;89:6;83:13;101:33;128:5;101:33;:::i;:::-;803:2;872:22;;384:13;692:74;;-1:-1;402:52;384:13;402:52;:::i;:::-;811:93;;;;941:2;995:9;991:22;224:13;949:74;;596:443;;;;;:::o;1468:117::-;-1:-1;;;;;1402:54;;1527:35;;1517:2;;1576:1;;1566:12;1517:2;1511:74;:::o;:::-;7752:3501:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "665": [
                  {
                    "length": 32,
                    "start": 292
                  },
                  {
                    "length": 32,
                    "start": 1146
                  },
                  {
                    "length": 32,
                    "start": 2178
                  },
                  {
                    "length": 32,
                    "start": 3226
                  },
                  {
                    "length": 32,
                    "start": 3280
                  }
                ],
                "667": [
                  {
                    "length": 32,
                    "start": 124
                  },
                  {
                    "length": 32,
                    "start": 924
                  },
                  {
                    "length": 32,
                    "start": 1094
                  },
                  {
                    "length": 32,
                    "start": 1382
                  },
                  {
                    "length": 32,
                    "start": 1441
                  },
                  {
                    "length": 32,
                    "start": 1562
                  }
                ],
                "669": [
                  {
                    "length": 32,
                    "start": 327
                  },
                  {
                    "length": 32,
                    "start": 1221
                  },
                  {
                    "length": 32,
                    "start": 2213
                  },
                  {
                    "length": 32,
                    "start": 3315
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c80631e2e4ebc1461003b5780633087d74214610064575b600080fd5b61004e610049366004610eb8565b610077565b60405161005b9190611400565b60405180910390f35b61004e610072366004610f80565b61018d565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356623118868560016040518463ffffffff1660e01b81526004016100cb9392919061116f565b60206040518083038186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b919061105f565b9050606061016b7f000000000000000000000000000000000000000000000000000000000000000083877f00000000000000000000000000000000000000000000000000000000000000006106c5565b90508060008151811061017a57fe5b6020026020010151925050509392505050565b600060606001600160a01b038616610283576001600160a01b03871661020057604080516002808252606082018352909160208301908036833701905050905088816001815181106101db57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061027e565b604080516003808252608082019092529060208201606080368337019050509050868160018151811061022f57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050888160028151811061025d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b61032f565b60408051600480825260a08201909252906020820160808036833701905050905086816001815181106102b257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505085816002815181106102e057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050888160038151811061030e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b898160008151811061033d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600061036a8a8386610077565b9050888111156103955760405162461bcd60e51b815260040161038c906111c9565b60405180910390fd5b60006104427f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663da5139ca8e8560016040518463ffffffff1660e01b81526004016103eb9392919061116f565b60206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043b919061105f565b87906107df565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d308d306104e97f0000000000000000000000000000000000000000000000000000000000000000886000815181106104a657fe5b6020026020010151896001815181106104bb57fe5b60200260200101517f0000000000000000000000000000000000000000000000000000000000000000610808565b8660006040518663ffffffff1660e01b815260040161050c959493929190611111565b6040805180830381600087803b15801561052557600080fd5b505af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190611077565b505061058a82847f000000000000000000000000000000000000000000000000000000000000000061087b565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc906105dc908f9030908c908790600401611145565b600060405180830381600087803b1580156105f657600080fd5b505af115801561060a573d6000803e3d6000fd5b505060405162ae511b60e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811693506302b9446c9250610662918f91908c906000908c90600401611111565b6040805180830381600087803b15801561067b57600080fd5b505af115801561068f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b39190611077565b50909c9b505050505050505050505050565b60606002835110156106e95760405162461bcd60e51b815260040161038c90611291565b825167ffffffffffffffff8111801561070157600080fd5b5060405190808252806020026020018201604052801561072b578160200160208202803683370190505b509050838160018351038151811061073f57fe5b60209081029190910101528251600019015b80156107d65760008061078f8887600186038151811061076d57fe5b602002602001015188868151811061078157fe5b6020026020010151886108dc565b915091506107b18484815181106107a257fe5b602002602001015183836109c5565b8460018503815181106107c057fe5b6020908102919091010152505060001901610751565b50949350505050565b808203828111156108025760405162461bcd60e51b815260040161038c90611192565b92915050565b60008060006108178686610a5f565b9150915086828260405160200161082f92919061109a565b6040516020818303038152906040528051906020012085604051602001610858939291906110c1565b60408051601f198184030181529190528051602090910120979650505050505050565b60606108c97f000000000000000000000000000000000000000000000000000000000000000085857f0000000000000000000000000000000000000000000000000000000000000000610ae9565b90506108d6818484610beb565b50505050565b60008060006108eb8686610a5f565b5090506000806108fd89898989610808565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561093557600080fd5b505afa158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d919061100b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316886001600160a01b0316146109b25780826109b5565b81815b909a909950975050505050505050565b60008084116109e65760405162461bcd60e51b815260040161038c90611200565b6000831180156109f65750600082115b610a125760405162461bcd60e51b815260040161038c906112ff565b6000610a2a6103e8610a248688610db9565b90610db9565b90506000610a3e6103e5610a2486896107df565b9050610a556001828481610a4e57fe5b0490610df0565b9695505050505050565b600080826001600160a01b0316846001600160a01b03161415610a945760405162461bcd60e51b815260040161038c9061124c565b826001600160a01b0316846001600160a01b031610610ab4578284610ab7565b83835b90925090506001600160a01b038216610ae25760405162461bcd60e51b815260040161038c90611347565b9250929050565b6060600283511015610b0d5760405162461bcd60e51b815260040161038c90611291565b825167ffffffffffffffff81118015610b2557600080fd5b50604051908082528060200260200182016040528015610b4f578160200160208202803683370190505b5090508381600081518110610b6057fe5b60200260200101818152505060005b60018451038110156107d657600080610ba588878581518110610b8e57fe5b602002602001015188866001018151811061078157fe5b91509150610bc7848481518110610bb857fe5b60200260200101518383610e13565b848460010181518110610bd657fe5b60209081029190910101525050600101610b6f565b60005b60018351038110156108d657600080848381518110610c0957fe5b6020026020010151858460010181518110610c2057fe5b6020026020010151915091506000610c388383610a5f565b5090506000878560010181518110610c4c57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614610c7a57826000610c7e565b6000835b91509150600060028a51038810610c955788610cc9565b610cc97f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106104bb57fe5b9050610d177f000000000000000000000000000000000000000000000000000000000000000088887f0000000000000000000000000000000000000000000000000000000000000000610808565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015610d54576020820181803683370190505b506040518563ffffffff1660e01b8152600401610d749493929190611409565b600060405180830381600087803b158015610d8e57600080fd5b505af1158015610da2573d6000803e3d6000fd5b505060019099019850610bee975050505050505050565b6000811580610dd457505080820282828281610dd157fe5b04145b6108025760405162461bcd60e51b815260040161038c906113c9565b818101818110156108025760405162461bcd60e51b815260040161038c906112c8565b6000808411610e345760405162461bcd60e51b815260040161038c9061137e565b600083118015610e445750600082115b610e605760405162461bcd60e51b815260040161038c906112ff565b6000610e6e856103e5610db9565b90506000610e7c8285610db9565b90506000610e9683610e90886103e8610db9565b90610df0565b9050808281610ea157fe5b04979650505050505050565b8035610802816114a2565b600080600060608486031215610ecc578283fd5b8335610ed7816114a2565b925060208481013567ffffffffffffffff80821115610ef4578485fd5b818701915087601f830112610f07578485fd5b813581811115610f15578586fd5b8381029150610f2584830161147b565b8181528481019084860184860187018c1015610f3f578889fd5b8895505b83861015610f6957610f558c82610ead565b835260019590950194918601918601610f43565b50979a979950505050604095909501359450505050565b600080600080600080600080610100898b031215610f9c578384fd5b8835610fa7816114a2565b97506020890135610fb7816114a2565b9650604089013595506060890135610fce816114a2565b94506080890135610fde816114a2565b935060a0890135610fee816114a2565b979a969950949793969295929450505060c08201359160e0013590565b60008060006060848603121561101f578283fd5b835161102a816114ba565b602085015190935061103b816114ba565b604085015190925063ffffffff81168114611054578182fd5b809150509250925092565b600060208284031215611070578081fd5b5051919050565b60008060408385031215611089578182fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b7fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b60208082526016908201527f696e73756666696369656e742d616d6f756e742d696e00000000000000000000604082015260600190565b6020808252602c908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4f60408201526b155514155517d05353d5539560a21b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b90815260200190565b6000858252602085818401526001600160a01b0385166040840152608060608401528351806080850152825b818110156114515785810183015185820160a001528201611435565b81811115611462578360a083870101525b50601f01601f19169290920160a0019695505050505050565b60405181810167ffffffffffffffff8111828210171561149a57600080fd5b604052919050565b6001600160a01b03811681146114b757600080fd5b50565b6dffffffffffffffffffffffffffff811681146114b757600080fdfea2646970667358221220bc3041e300fb4bf563001ae7a3e1fdb0450a2e738d0fad4fb6785c0651c000d564736f6c634300060c0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1E2E4EBC EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x3087D742 EQ PUSH2 0x64 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x49 CALLDATASIZE PUSH1 0x4 PUSH2 0xEB8 JUMP JUMPDEST PUSH2 0x77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0xF80 JUMP JUMPDEST PUSH2 0x18D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x56623118 DUP7 DUP6 PUSH1 0x1 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x116F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11B SWAP2 SWAP1 PUSH2 0x105F JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x16B PUSH32 0x0 DUP4 DUP8 PUSH32 0x0 PUSH2 0x6C5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x17A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x283 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH2 0x200 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE SWAP1 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP9 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1DB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x27E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x3 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x60 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x22F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP9 DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x25D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP7 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP6 DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x2E0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP9 DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x30E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP JUMPDEST DUP10 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x33D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x36A DUP11 DUP4 DUP7 PUSH2 0x77 JUMP JUMPDEST SWAP1 POP DUP9 DUP2 GT ISZERO PUSH2 0x395 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x11C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x442 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDA5139CA DUP15 DUP6 PUSH1 0x1 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x116F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x417 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x43B SWAP2 SWAP1 PUSH2 0x105F JUMP JUMPDEST DUP8 SWAP1 PUSH2 0x7DF JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x97DA6D30 DUP14 ADDRESS PUSH2 0x4E9 PUSH32 0x0 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x4A6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x4BB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH32 0x0 PUSH2 0x808 JUMP JUMPDEST DUP7 PUSH1 0x0 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x50C SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x539 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x55D SWAP2 SWAP1 PUSH2 0x1077 JUMP JUMPDEST POP POP PUSH2 0x58A DUP3 DUP5 PUSH32 0x0 PUSH2 0x87B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3C6340F3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xF18D03CC SWAP1 PUSH2 0x5DC SWAP1 DUP16 SWAP1 ADDRESS SWAP1 DUP13 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1145 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x60A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH3 0xAE511B PUSH1 0xE2 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 POP PUSH4 0x2B9446C SWAP3 POP PUSH2 0x662 SWAP2 DUP16 SWAP2 SWAP1 DUP13 SWAP1 PUSH1 0x0 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x68F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6B3 SWAP2 SWAP1 PUSH2 0x1077 JUMP JUMPDEST POP SWAP1 SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP4 MLOAD LT ISZERO PUSH2 0x6E9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1291 JUMP JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x72B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 DUP2 PUSH1 0x1 DUP4 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x73F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP3 MLOAD PUSH1 0x0 NOT ADD JUMPDEST DUP1 ISZERO PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 PUSH2 0x78F DUP9 DUP8 PUSH1 0x1 DUP7 SUB DUP2 MLOAD DUP2 LT PUSH2 0x76D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x781 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x8DC JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x7B1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x7A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0x9C5 JUMP JUMPDEST DUP5 PUSH1 0x1 DUP6 SUB DUP2 MLOAD DUP2 LT PUSH2 0x7C0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x0 NOT ADD PUSH2 0x751 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1192 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x817 DUP7 DUP7 PUSH2 0xA5F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP7 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x82F SWAP3 SWAP2 SWAP1 PUSH2 0x109A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x858 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x10C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x8C9 PUSH32 0x0 DUP6 DUP6 PUSH32 0x0 PUSH2 0xAE9 JUMP JUMPDEST SWAP1 POP PUSH2 0x8D6 DUP2 DUP5 DUP5 PUSH2 0xBEB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x8EB DUP7 DUP7 PUSH2 0xA5F JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x8FD DUP10 DUP10 DUP10 DUP10 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x949 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x96D SWAP2 SWAP1 PUSH2 0x100B JUMP JUMPDEST POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x9B2 JUMPI DUP1 DUP3 PUSH2 0x9B5 JUMP JUMPDEST DUP2 DUP2 JUMPDEST SWAP1 SWAP11 SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0x9E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1200 JUMP JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0x9F6 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0xA12 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x12FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2A PUSH2 0x3E8 PUSH2 0xA24 DUP7 DUP9 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA3E PUSH2 0x3E5 PUSH2 0xA24 DUP7 DUP10 PUSH2 0x7DF JUMP JUMPDEST SWAP1 POP PUSH2 0xA55 PUSH1 0x1 DUP3 DUP5 DUP2 PUSH2 0xA4E JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0xDF0 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xA94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x124C JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xAB4 JUMPI DUP3 DUP5 PUSH2 0xAB7 JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1347 JUMP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP4 MLOAD LT ISZERO PUSH2 0xB0D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x1291 JUMP JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xB25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB4F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xB60 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP5 MLOAD SUB DUP2 LT ISZERO PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 PUSH2 0xBA5 DUP9 DUP8 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xB8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP7 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x781 JUMPI INVALID JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xBC7 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBB8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 PUSH2 0xE13 JUMP JUMPDEST DUP5 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xBD6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xB6F JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP4 MLOAD SUB DUP2 LT ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x0 DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC09 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xC20 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0xC38 DUP4 DUP4 PUSH2 0xA5F JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP8 DUP6 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0xC4C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xC7A JUMPI DUP3 PUSH1 0x0 PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x2 DUP11 MLOAD SUB DUP9 LT PUSH2 0xC95 JUMPI DUP9 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0xCC9 PUSH32 0x0 DUP8 DUP13 DUP12 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x4BB JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xD17 PUSH32 0x0 DUP9 DUP9 PUSH32 0x0 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP5 DUP5 DUP5 PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD54 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD74 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1409 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDA2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP10 ADD SWAP9 POP PUSH2 0xBEE SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xDD4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xDD1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x13C9 JUMP JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x12C8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 GT PUSH2 0xE34 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x137E JUMP JUMPDEST PUSH1 0x0 DUP4 GT DUP1 ISZERO PUSH2 0xE44 JUMPI POP PUSH1 0x0 DUP3 GT JUMPDEST PUSH2 0xE60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x38C SWAP1 PUSH2 0x12FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE6E DUP6 PUSH2 0x3E5 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE7C DUP3 DUP6 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE96 DUP4 PUSH2 0xE90 DUP9 PUSH2 0x3E8 PUSH2 0xDB9 JUMP JUMPDEST SWAP1 PUSH2 0xDF0 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 PUSH2 0xEA1 JUMPI INVALID JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x802 DUP2 PUSH2 0x14A2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xECC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xED7 DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 DUP2 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEF4 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xF07 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xF15 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP4 DUP2 MUL SWAP2 POP PUSH2 0xF25 DUP5 DUP4 ADD PUSH2 0x147B JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP5 DUP7 ADD DUP5 DUP7 ADD DUP8 ADD DUP13 LT ISZERO PUSH2 0xF3F JUMPI DUP9 DUP10 REVERT JUMPDEST DUP9 SWAP6 POP JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0xF69 JUMPI PUSH2 0xF55 DUP13 DUP3 PUSH2 0xEAD JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0xF43 JUMP JUMPDEST POP SWAP8 SWAP11 SWAP8 SWAP10 POP POP POP POP PUSH1 0x40 SWAP6 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0xF9C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0xFA7 DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0xFB7 DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0xFCE DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH2 0xFDE DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH2 0xFEE DUP2 PUSH2 0x14A2 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0xC0 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0xE0 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x101F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x102A DUP2 PUSH2 0x14BA JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x103B DUP2 PUSH2 0x14BA JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1054 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1070 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1089 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND DUP3 MSTORE SWAP2 SWAP1 SWAP3 SHL AND PUSH1 0x14 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 DUP5 ADD MSTORE PUSH1 0x15 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x35 DUP3 ADD MSTORE PUSH1 0x55 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 MSTORE SWAP4 DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE SWAP2 SWAP1 SWAP4 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20556E646572666C6F770000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x696E73756666696369656E742D616D6F756E742D696E00000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E53554646494349454E545F4F PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x155514155517D05353D55395 PUSH1 0xA2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x25 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A204944454E544943414C5F41444452 PUSH1 0x40 DUP3 ADD MSTORE PUSH5 0x4553534553 PUSH1 0xD8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E56414C49445F504154480000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E53554646494349454E545F4C PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x4951554944495459 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A205A45524F5F414444524553530000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617056324C6962726172793A20494E53554646494349454E545F49 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x1394155517D05353D55395 PUSH1 0xAA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE PUSH1 0x20 DUP6 DUP2 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x80 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1451 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0xA0 ADD MSTORE DUP3 ADD PUSH2 0x1435 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1462 JUMPI DUP4 PUSH1 0xA0 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0xA0 ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x149A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x14B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x14B7 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC ADDRESS COINBASE 0xE3 STOP 0xFB 0x4B CREATE2 PUSH4 0x1AE7A3 0xE1 REVERT 0xB0 GASLIMIT EXP 0x2E PUSH20 0x8D0FAD4FB6785C0651C000D564736F6C63430006 0xC STOP CALLER ",
              "sourceMap": "7752:3501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8213:368;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8587:1384;;;;;;:::i;:::-;;:::i;8213:368::-;8346:16;8374:17;8394:8;-1:-1:-1;;;;;8394:17:0;;8412:8;8422;8432:4;8394:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8374:63;;8447:24;8474:69;8504:7;8513:9;8524:4;8530:12;8474:29;:69::i;:::-;8447:96;;8564:7;8572:1;8564:10;;;;;;;;;;;;;;8553:21;;8213:368;;;;;;;:::o;8587:1384::-;8820:7;8839:21;-1:-1:-1;;;;;8874:19:0;;8870:468;;-1:-1:-1;;;;;8913:19:0;;8909:266;;8959:16;;;8973:1;8959:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8959:16:0;8952:23;;9011:8;8993:4;8998:1;8993:7;;;;;;;;;;;;;:27;-1:-1:-1;;;;;8993:27:0;;;-1:-1:-1;;;;;8993:27:0;;;;;8909:266;;;9066:16;;;9080:1;9066:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9066:16:0;9059:23;;9110:5;9100:4;9105:1;9100:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;9100:15:0;;;-1:-1:-1;;;;;9100:15:0;;;;;9151:8;9133:4;9138:1;9133:7;;;;;;;;;;;;;:27;-1:-1:-1;;;;;9133:27:0;;;-1:-1:-1;;;;;9133:27:0;;;;;8909:266;8870:468;;;9212:16;;;9226:1;9212:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9212:16:0;9205:23;;9252:5;9242:4;9247:1;9242:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;9242:15:0;;;-1:-1:-1;;;;;9242:15:0;;;;;9281:5;9271:4;9276:1;9271:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;9271:15:0;;;-1:-1:-1;;;;;9271:15:0;;;;;9318:8;9300:4;9305:1;9300:7;;;;;;;;;;;;;:27;-1:-1:-1;;;;;9300:27:0;;;-1:-1:-1;;;;;9300:27:0;;;;;8870:468;9365:7;9347:4;9352:1;9347:7;;;;;;;;;;;;;:26;-1:-1:-1;;;;;9347:26:0;;;-1:-1:-1;;;;;9347:26:0;;;;;9383:16;9402:40;9417:8;9427:4;9433:8;9402:14;:40::i;:::-;9383:59;;9472:11;9460:8;:23;;9452:58;;;;-1:-1:-1;;;9452:58:0;;;;;;;:::i;:::-;;;;;;;;;9520:18;9541:54;9553:8;-1:-1:-1;;;;;9553:16:0;;9570:7;9579:8;9589:4;9553:41;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9541:7;;:11;:54::i;:::-;9520:75;;9605:8;-1:-1:-1;;;;;9605:17:0;;9623:7;9640:4;9647:65;9672:7;9681:4;9686:1;9681:7;;;;;;;;;;;;;;9690:4;9695:1;9690:7;;;;;;;;;;;;;;9699:12;9647:24;:65::i;:::-;9714:8;9724:1;9605:121;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;9736:60;9762:8;9772:4;9786:8;9736:25;:60::i;:::-;9806:57;;-1:-1:-1;;;9806:57:0;;-1:-1:-1;;;;;9806:8:0;:17;;;;:57;;9824:7;;9841:4;;9848:2;;9852:10;;9806:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9873:62:0;;-1:-1:-1;;;9873:62:0;;:8;-1:-1:-1;;;;;9873:16:0;;;-1:-1:-1;9873:16:0;;-1:-1:-1;9873:62:0;;9890:8;;9873;9919:2;;9923:1;;9926:8;;9873:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9953:10:0;;8587:1384;-1:-1:-1;;;;;;;;;;;;8587:1384:0:o;6178:560::-;6301:21;6357:1;6342:4;:11;:16;;6334:59;;;;-1:-1:-1;;;6334:59:0;;;;;;;:::i;:::-;6424:4;:11;6413:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6413:23:0;;6403:33;;6476:9;6446:7;6471:1;6454:7;:14;:18;6446:27;;;;;;;;;;;;;;;;;:39;6509:11;;-1:-1:-1;;6509:15:0;6495:237;6526:5;;6495:237;;6553:14;6569:15;6588:56;6600:7;6609:4;6618:1;6614;:5;6609:11;;;;;;;;;;;;;;6622:4;6627:1;6622:7;;;;;;;;;;;;;;6631:12;6588:11;:56::i;:::-;6552:92;;;;6675:46;6687:7;6695:1;6687:10;;;;;;;;;;;;;;6699:9;6710:10;6675:11;:46::i;:::-;6658:7;6670:1;6666;:5;6658:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;6533:3:0;6495:237;;;;6178:560;;;;;;:::o;1571:136::-;1663:5;;;1658:16;;;;1650:50;;;;-1:-1:-1;;;1650:50:0;;;;;;;:::i;:::-;1571:136;;;;:::o;3018:606::-;3167:12;3192:14;3208;3226:26;3237:6;3245;3226:10;:26::i;:::-;3191:61;;;;3421:7;3481:6;3489;3464:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3454:43;;;;;;3523:12;3346:229;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3346:229:0;;;;;;;;;3315:278;;3346:229;3315:278;;;;;3018:606;-1:-1:-1;;;;;;;3018:606:0:o;10118:274::-;10255:24;10282:69;10313:7;10322:8;10332:4;10338:12;10282:30;:69::i;:::-;10255:96;;10361:24;10367:7;10376:4;10382:2;10361:5;:24::i;:::-;10118:274;;;;:::o;3679:475::-;3832:16;3850;3879:14;3899:26;3910:6;3918;3899:10;:26::i;:::-;3878:47;;;3936:16;3954;3991:46;3999:7;4008:6;4016;4024:12;3991:7;:46::i;:::-;-1:-1:-1;;;;;3976:74:0;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3935:117;;;;;;;;;4095:6;-1:-1:-1;;;;;4085:16:0;:6;-1:-1:-1;;;;;4085:16:0;;:62;;4128:8;4138;4085:62;;;4105:8;4115;4085:62;4062:85;;;;-1:-1:-1;3679:475:0;-1:-1:-1;;;;;;;;3679:475:0:o;5630:466::-;5723:13;5768:1;5756:9;:13;5748:70;;;;-1:-1:-1;;;5748:70:0;;;;;;;:::i;:::-;5848:1;5836:9;:13;:31;;;;;5866:1;5853:10;:14;5836:31;5828:84;;;;-1:-1:-1;;;5828:84:0;;;;;;;:::i;:::-;5922:14;5939:34;5968:4;5939:24;:9;5953;5939:13;:24::i;:::-;:28;;:34::i;:::-;5922:51;-1:-1:-1;5983:16:0;6002:34;6032:3;6002:25;:10;6017:9;6002:14;:25::i;:34::-;5983:53;;6057:32;6087:1;6070:11;6058:9;:23;;;;;;;6057:29;:32::i;:::-;6046:43;5630:466;-1:-1:-1;;;;;;5630:466:0:o;2584:345::-;2659:14;2675;2719:6;-1:-1:-1;;;;;2709:16:0;:6;-1:-1:-1;;;;;2709:16:0;;;2701:66;;;;-1:-1:-1;;;2701:66:0;;;;;;;:::i;:::-;2805:6;-1:-1:-1;;;;;2796:15:0;:6;-1:-1:-1;;;;;2796:15:0;;:53;;2834:6;2842;2796:53;;;2815:6;2823;2796:53;2777:72;;-1:-1:-1;2777:72:0;-1:-1:-1;;;;;;2867:20:0;;2859:63;;;;-1:-1:-1;;;2859:63:0;;;;;;;:::i;:::-;2584:345;;;;;:::o;4917:595::-;5081:24;5140:1;5125:4;:11;:16;;5117:59;;;;-1:-1:-1;;;5117:59:0;;;;;;;:::i;:::-;5210:4;:11;5196:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5196:26:0;;5186:36;;5245:8;5232:7;5240:1;5232:10;;;;;;;;;;;;;:21;;;;;5268:9;5263:243;5297:1;5283:4;:11;:15;5279:1;:19;5263:243;;;5320:17;5339:18;5361:56;5373:7;5382:4;5387:1;5382:7;;;;;;;;;;;;;;5391:4;5396:1;5400;5396:5;5391:11;;;;;;;5361:56;5319:98;;;;5448:47;5461:7;5469:1;5461:10;;;;;;;;;;;;;;5473:9;5484:10;5448:12;:47::i;:::-;5431:7;5439:1;5443;5439:5;5431:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;5300:3:0;;5263:243;;10477:774;10616:9;10611:634;10645:1;10631:4;:11;:15;10627:1;:19;10611:634;;;10668:13;10683:14;10702:4;10707:1;10702:7;;;;;;;;;;;;;;10711:4;10716:1;10720;10716:5;10711:11;;;;;;;;;;;;;;10667:56;;;;10738:14;10758:42;10786:5;10793:6;10758:27;:42::i;:::-;10737:63;;;10814:17;10834:7;10842:1;10846;10842:5;10834:14;;;;;;;;;;;;;;10814:34;;10863:18;10883;10914:6;-1:-1:-1;;;;;10905:15:0;:5;-1:-1:-1;;;;;10905:15:0;;:67;;10950:9;10969:1;10905:67;;;10932:1;10936:9;10905:67;10862:110;;;;10986:10;11017:1;11003:4;:11;:15;10999:1;:19;:96;;11092:3;10999:96;;;11021:68;11046:7;11055:6;11063:4;11068:1;11072;11068:5;11063:11;;;;;;;11021:68;10986:109;;11124:62;11149:7;11158:5;11165:6;11173:12;11124:24;:62::i;:::-;-1:-1:-1;;;;;11109:83:0;;11193:10;11205;11217:2;11231:1;11221:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11221:12:0;;11109:125;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10648:3:0;;;;;-1:-1:-1;10611:634:0;;-1:-1:-1;;;;;;;;10611:634:0;1713:153;1771:9;1800:6;;;:30;;-1:-1:-1;;1815:5:0;;;1829:1;1824;1815:5;1824:1;1810:15;;;;;:20;1800:30;1792:67;;;;-1:-1:-1;;;1792:67:0;;;;;;;:::i;1426:139::-;1518:5;;;1513:16;;;;1505:53;;;;-1:-1:-1;;;1505:53:0;;;;;;;:::i;4277:561::-;4409:17;4457:1;4446:8;:12;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;4536:1;4524:9;:13;:31;;;;;4554:1;4541:10;:14;4524:31;4516:84;;;;-1:-1:-1;;;4516:84:0;;;;;;;:::i;:::-;4610:23;4636:17;:8;4649:3;4636:12;:17::i;:::-;4610:43;-1:-1:-1;4663:17:0;4683:31;4610:43;4703:10;4683:19;:31::i;:::-;4663:51;-1:-1:-1;4724:19:0;4746:40;4770:15;4746:19;:9;4760:4;4746:13;:19::i;:::-;:23;;:40::i;:::-;4724:62;;4820:11;4808:9;:23;;;;;;;4277:561;-1:-1:-1;;;;;;;4277:561:0:o;5:130:-1:-;72:20;;97:33;72:20;97:33;:::i;1594:651::-;;;;1769:2;1757:9;1748:7;1744:23;1740:32;1737:2;;;-1:-1;;1775:12;1737:2;967:6;954:20;979:45;1018:5;979:45;:::i;:::-;1827:75;-1:-1;1967:2;1952:18;;;1939:32;1991:18;1980:30;;;1977:2;;;-1:-1;;2013:12;1977:2;2104:6;2093:9;2089:22;;;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;1991:18;19133:6;19130:30;19127:2;;;-1:-1;;19163:12;19127:2;1967;19200:6;19196:17;;;354:80;1967:2;19196:17;19261:15;354:80;:::i;:::-;462:21;;;519:14;;;;494:17;;;599:27;;;;;596:36;-1:-1;593:2;;;-1:-1;;635:12;593:2;-1:-1;661:10;;655:206;680:6;677:1;674:13;655:206;;;760:37;793:3;781:10;760:37;:::i;:::-;748:50;;702:1;695:9;;;;;812:14;;;;840;;655:206;;;-1:-1;1731:514;;2033:88;;-1:-1;;;;2158:2;2197:22;;;;1244:20;;-1:-1;;;;1731:514::o;2252:1169::-;;;;;;;;;2499:3;2487:9;2478:7;2474:23;2470:33;2467:2;;;-1:-1;;2506:12;2467:2;967:6;954:20;979:45;1018:5;979:45;:::i;:::-;2558:75;-1:-1;2670:2;2721:22;;954:20;979:45;954:20;979:45;:::i;:::-;2678:75;-1:-1;2790:2;2829:22;;1244:20;;-1:-1;2898:2;2937:22;;72:20;97:33;72:20;97:33;:::i;:::-;2906:63;-1:-1;3006:3;3046:22;;72:20;97:33;72:20;97:33;:::i;:::-;3015:63;-1:-1;3115:3;3155:22;;72:20;97:33;72:20;97:33;:::i;:::-;2461:960;;;;-1:-1;2461:960;;;;;;3124:63;;-1:-1;;;3224:3;3264:22;;1244:20;;3333:3;3373:22;1244:20;;2461:960::o;3428:533::-;;;;3576:2;3564:9;3555:7;3551:23;3547:32;3544:2;;;-1:-1;;3582:12;3544:2;1120:6;1114:13;1132:33;1159:5;1132:33;:::i;:::-;3745:2;3795:22;;1114:13;3634:74;;-1:-1;1132:33;1114:13;1132:33;:::i;:::-;3864:2;3913:22;;1532:13;3753:74;;-1:-1;20692:10;20681:22;;22458:34;;22448:2;;-1:-1;;22496:12;22448:2;3872:73;;;;3538:423;;;;;:::o;3968:263::-;;4083:2;4071:9;4062:7;4058:23;4054:32;4051:2;;;-1:-1;;4089:12;4051:2;-1:-1;1392:13;;4045:186;-1:-1;4045:186::o;4238:399::-;;;4370:2;4358:9;4349:7;4345:23;4341:32;4338:2;;;-1:-1;;4376:12;4338:2;-1:-1;;1392:13;;4539:2;4589:22;;;1392:13;;;;;-1:-1;4332:305::o;9929:392::-;-1:-1;;21852:2;21848:14;;;;;4853:58;;21848:14;;;;;10182:2;10173:12;;4853:58;10284:12;;;10073:248::o;10328:798::-;8637:66;8617:87;;21852:2;21848:14;;;;-1:-1;;21848:14;8602:1;8723:11;;4853:58;10867:12;;;5123:58;;;;10978:12;;;5123:58;11089:12;;;10601:525::o;11133:708::-;-1:-1;;;;;20475:54;;;5626:62;;20475:54;;;11569:2;11554:18;;4715:37;20475:54;;;;11652:2;11637:18;;4715:37;11743:2;11728:18;;5779:58;;;;11826:3;11811:19;;5123:58;;;;11392:3;11377:19;;11363:478::o;11848:580::-;-1:-1;;;;;20475:54;;;5626:62;;20475:54;;;12248:2;12233:18;;4715:37;20475:54;;12331:2;12316:18;;4715:37;12414:2;12399:18;;5123:58;;;;12071:3;12056:19;;12042:386::o;13150:456::-;-1:-1;;;;;20475:54;;;;5626:62;;13515:2;13500:18;;5123:58;;;;20082:13;20075:21;13592:2;13577:18;;4988:34;13339:2;13324:18;;13310:296::o;13613:416::-;13813:2;13827:47;;;6074:2;13798:18;;;19524:19;6110:23;19564:14;;;6090:44;6153:12;;;13784:245::o;14036:416::-;14236:2;14250:47;;;6404:2;14221:18;;;19524:19;6440:24;19564:14;;;6420:45;6484:12;;;14207:245::o;14459:416::-;14659:2;14673:47;;;6735:2;14644:18;;;19524:19;6771:34;19564:14;;;6751:55;-1:-1;;;6826:12;;;6819:36;6874:12;;;14630:245::o;14882:416::-;15082:2;15096:47;;;7125:2;15067:18;;;19524:19;7161:34;19564:14;;;7141:55;-1:-1;;;7216:12;;;7209:29;7257:12;;;15053:245::o;15305:416::-;15505:2;15519:47;;;7508:2;15490:18;;;19524:19;7544:32;19564:14;;;7524:53;7596:12;;;15476:245::o;15728:416::-;15928:2;15942:47;;;7847:2;15913:18;;;19524:19;7883:26;19564:14;;;7863:47;7929:12;;;15899:245::o;16151:416::-;16351:2;16365:47;;;8180:2;16336:18;;;19524:19;8216:34;19564:14;;;8196:55;-1:-1;;;8271:12;;;8264:32;8315:12;;;16322:245::o;16574:416::-;16774:2;16788:47;;;8973:2;16759:18;;;19524:19;9009:32;19564:14;;;8989:53;9061:12;;;16745:245::o;16997:416::-;17197:2;17211:47;;;9312:2;17182:18;;;19524:19;9348:34;19564:14;;;9328:55;-1:-1;;;9403:12;;;9396:35;9450:12;;;17168:245::o;17420:416::-;17620:2;17634:47;;;9701:2;17605:18;;;19524:19;9737:26;19564:14;;;9717:47;9783:12;;;17591:245::o;17843:222::-;5123:58;;;17970:2;17955:18;;17941:124::o;18072:640::-;;5173:5;5130:3;5123:58;18466:2;5173:5;18466:2;18455:9;18451:18;5123:58;-1:-1;;;;;19998:5;20475:54;18549:2;18538:9;18534:18;4715:37;18301:3;18586:2;18575:9;18571:18;18564:48;5335:5;19380:12;19536:6;18301:3;18290:9;18286:19;19524;-1:-1;21190:101;21204:6;21201:1;21198:13;21190:101;;;21271:11;;;;;21265:18;21252:11;;;19564:14;21252:11;21245:39;21219:10;;21190:101;;;21306:6;21303:1;21300:13;21297:2;;;-1:-1;19564:14;21362:6;18290:9;21353:16;;21346:27;21297:2;-1:-1;21757:7;21741:14;-1:-1;;21737:28;5492:39;;;;19564:14;5492:39;;18272:440;-1:-1;;;;;;18272:440::o;18719:256::-;18781:2;18775:9;18807:17;;;18882:18;18867:34;;18903:22;;;18864:62;18861:2;;;18939:1;;18929:12;18861:2;18781;18948:22;18759:216;;-1:-1;18759:216::o;21880:117::-;-1:-1;;;;;21967:5;20475:54;21942:5;21939:35;21929:2;;21988:1;;21978:12;21929:2;21923:74;:::o;22152:117::-;20370:30;22239:5;20359:42;22214:5;22211:35;22201:2;;22260:1;;22250:12"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1077600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "getInputAmount(address,address[],uint256)": "infinite",
                "swap(address,address,uint256,address,address,address,uint256,uint256)": "infinite"
              },
              "internal": {
                "_swap(uint256[] memory,address[] memory,address)": "infinite",
                "_swapExactTokensForTokens(uint256,address[] memory,address)": "infinite"
              }
            },
            "methodIdentifiers": {
              "getInputAmount(address,address[],uint256)": "1e2e4ebc",
              "swap(address,address,uint256,address,address,address,uint256,uint256)": "3087d742"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"contract IBentoBoxV1\",\"name\":\"_bentoBox\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_pairCodeHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"shareOut\",\"type\":\"uint256\"}],\"name\":\"getInputAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountMaxIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"path1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"path2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shareIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareOut\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"SushiSwapMultiExactSwapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        },
        "UniswapV2Library": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220753a8401de385595c2e6fde4f59f5730c16b1d1459214d7dc3d00e37d38ed53064736f6c634300060c0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH22 0x3A8401DE385595C2E6FDE4F59F5730C16B1D1459214D PUSH30 0xC3D00E37D38ED53064736F6C634300060C00330000000000000000000000 ",
              "sourceMap": "2418:4322:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220753a8401de385595c2e6fde4f59f5730c16b1d1459214d7dc3d00e37d38ed53064736f6c634300060c0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH22 0x3A8401DE385595C2E6FDE4F59F5730C16B1D1459214D PUSH30 0xC3D00E37D38ED53064736F6C634300060C00330000000000000000000000 ",
              "sourceMap": "2418:4322:0:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "97",
                "totalCost": "17297"
              },
              "internal": {
                "getAmountIn(uint256,uint256,uint256)": "infinite",
                "getAmountOut(uint256,uint256,uint256)": "infinite",
                "getAmountsIn(address,uint256,address[] memory,bytes32)": "infinite",
                "getAmountsOut(address,uint256,address[] memory,bytes32)": "infinite",
                "getReserves(address,address,address,bytes32)": "infinite",
                "pairFor(address,address,address,bytes32)": "infinite",
                "sortTokens(address,address)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":\"UniswapV2Library\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":350},\"remappings\":[]},\"sources\":{\"contracts/flat/SushiSwapMultiExactSwapper.sol\":{\"content\":\"// File contracts/swappers/SushiSwapMultiExactSwapper.sol\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable avoid-low-level-calls\\n\\n// File @boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol@v1.2.1\\n// License-Identifier: MIT\\ninterface IERC20 {\\n\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol@v1.2.1\\n// License-Identifier: MIT\\n\\nlibrary BoringERC20 {\\n    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)\\n\\n    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\\n    /// Reverts on a failed transfer.\\n    /// @param token The address of the ERC-20 token.\\n    /// @param to Transfer tokens to.\\n    /// @param amount The token amount.\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\n    }\\n}\\n\\n// File @boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol@v1.2.1\\n// License-Identifier: MIT\\n\\n/// @notice A library for performing overflow-/underflow-safe math,\\n/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).\\nlibrary BoringMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"BoringMath: Mul Overflow\\\");\\n    }\\n}\\n\\n// File @sushiswap/core/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol@v1.4.2\\n// License-Identifier: GPL-3.0\\n\\ninterface IUniswapV2Pair {\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n// File contracts/libraries/UniswapV2Library.sol\\n// License-Identifier: GPL-3.0\\n\\nlibrary UniswapV2Library {\\n    using BoringMath for uint256;\\n\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\n        require(tokenA != tokenB, \\\"UniswapV2Library: IDENTICAL_ADDRESSES\\\");\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\n        require(token0 != address(0), \\\"UniswapV2Library: ZERO_ADDRESS\\\");\\n    }\\n\\n    // calculates the CREATE2 address for a pair without making any external calls\\n    function pairFor(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal pure returns (address pair) {\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\n        pair = address(\\n            uint256(\\n                keccak256(\\n                    abi.encodePacked(\\n                        hex\\\"ff\\\",\\n                        factory,\\n                        keccak256(abi.encodePacked(token0, token1)),\\n                        pairCodeHash // init code hash\\n                    )\\n                )\\n            )\\n        );\\n    }\\n\\n    // fetches and sorts the reserves for a pair\\n    function getReserves(\\n        address factory,\\n        address tokenA,\\n        address tokenB,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256 reserveA, uint256 reserveB) {\\n        (address token0, ) = sortTokens(tokenA, tokenB);\\n        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, pairCodeHash)).getReserves();\\n        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);\\n    }\\n    \\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\n    function getAmountOut(\\n        uint256 amountIn,\\n        uint256 reserveIn,\\n        uint256 reserveOut\\n    ) internal pure returns (uint256 amountOut) {\\n        require(amountIn > 0, \\\"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\\\");\\n        require(reserveIn > 0 && reserveOut > 0, \\\"UniswapV2Library: INSUFFICIENT_LIQUIDITY\\\");\\n        uint256 amountInWithFee = amountIn.mul(997);\\n        uint256 numerator = amountInWithFee.mul(reserveOut);\\n        uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);\\n        amountOut = numerator / denominator;\\n    }\\n\\n    // performs chained getAmountOut calculations on any number of pairs\\n    function getAmountsOut(\\n        address factory,\\n        uint256 amountIn,\\n        address[] memory path,\\n        bytes32 pairCodeHash\\n    ) internal view returns (uint256[] memory amounts) {\\n        require(path.length >= 2, \\\"UniswapV2Library: INVALID_PATH\\\");\\n        amounts = new uint256[](path.length);\\n        amounts[0] = amountIn;\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1], pairCodeHash);\\n            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n\\n    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset\\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {\\n        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\n        uint numerator = reserveIn.mul(amountOut).mul(1000);\\n        uint denominator = reserveOut.sub(amountOut).mul(997);\\n        amountIn = (numerator / denominator).add(1);\\n    }\\n    \\n    // performs chained getAmountIn calculations on any number of pairs\\n    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes32 pairCodeHash) internal view returns (uint[] memory amounts) {\\n        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');\\n        amounts = new uint[](path.length);\\n        amounts[amounts.length - 1] = amountOut;\\n        for (uint i = path.length - 1; i > 0; i--) {\\n            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], pairCodeHash);\\n            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);\\n        }\\n    }\\n}\\n\\n// File @sushiswap/bentobox-sdk/contracts/IBentoBoxV1.sol@v1.0.2\\n// License-Identifier: MIT\\n\\ninterface IBentoBoxV1 {\\n    function deposit(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external payable returns (uint256 amountOut, uint256 shareOut);\\n\\n    function toAmount(\\n        IERC20 token,\\n        uint256 share,\\n        bool roundUp\\n    ) external view returns (uint256 amount);\\n    \\n    function toShare(\\n        IERC20 token,\\n        uint256 amount,\\n        bool roundUp\\n    ) external view returns (uint256 share);\\n    \\n    function transfer(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 share\\n    ) external;\\n\\n    function withdraw(\\n        IERC20 token_,\\n        address from,\\n        address to,\\n        uint256 amount,\\n        uint256 share\\n    ) external returns (uint256 amountOut, uint256 shareOut);\\n}\\n\\n// File contracts/swappers/SushiSwapMultiSwapper.sol\\n// License-Identifier: GPL-3.0\\n\\ncontract SushiSwapMultiExactSwapper {\\n    using BoringERC20 for IERC20;\\n    using BoringMath for uint256;\\n\\n    address private immutable factory;\\n    IBentoBoxV1 private immutable bentoBox;\\n    bytes32 private immutable pairCodeHash;\\n\\n    constructor(\\n        address _factory,\\n        IBentoBoxV1 _bentoBox,\\n        bytes32 _pairCodeHash\\n    ) public {\\n        factory = _factory;\\n        bentoBox = _bentoBox;\\n        pairCodeHash = _pairCodeHash;\\n    }\\n\\n    function getInputAmount(\\n        IERC20 tokenOut,\\n        address[] memory path,\\n        uint256 shareOut\\n    ) public view returns (uint256 amountIn) {\\n        uint256 amountOut = bentoBox.toAmount(tokenOut, shareOut, true);\\n        uint256[] memory amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, pairCodeHash);\\n        amountIn = amounts[0];\\n    }\\n\\n    function swap(\\n        IERC20 tokenIn,\\n        IERC20 tokenOut,\\n        uint256 amountMaxIn,\\n        address path1,\\n        address path2,\\n        address to,\\n        uint256 shareIn,\\n        uint256 shareOut\\n    ) external returns (uint256) {\\n        address[] memory path;\\n        if (path2 == address(0)) {\\n            if (path1 == address(0)) {\\n                path = new address[](2);\\n                path[1] = address(tokenOut);\\n            } else {\\n                path = new address[](3);\\n                path[1] = path1;\\n                path[2] = address(tokenOut);\\n            }\\n        } else {\\n            path = new address[](4);\\n            path[1] = path1;\\n            path[2] = path2;\\n            path[3] = address(tokenOut);\\n        }\\n        path[0] = address(tokenIn);\\n        uint256 amountIn = getInputAmount(tokenOut, path, shareOut);\\n        require(amountIn <= amountMaxIn, \\\"insufficient-amount-in\\\");\\n        uint256 difference = shareIn.sub(bentoBox.toShare(tokenIn, amountIn, true));\\n        bentoBox.withdraw(tokenIn, address(this), UniswapV2Library.pairFor(factory, path[0], path[1], pairCodeHash), amountIn, 0);\\n        _swapExactTokensForTokens(amountIn, path, address(bentoBox));\\n        bentoBox.transfer(tokenIn, address(this), to, difference);\\n        bentoBox.deposit(tokenOut, address(bentoBox), to, 0, shareOut);\\n        return (difference);\\n    }\\n\\n    // Swaps an exact amount of tokens for another token through the path passed as an argument\\n    // Returns the amount of the final token\\n    function _swapExactTokensForTokens(\\n        uint256 amountIn,\\n        address[] memory path,\\n        address to\\n    ) internal {\\n        uint256[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, pairCodeHash);\\n        _swap(amounts, path, to);\\n    }\\n\\n    // requires the initial amount to have already been sent to the first pair\\n    function _swap(\\n        uint256[] memory amounts,\\n        address[] memory path,\\n        address _to\\n    ) internal virtual {\\n        for (uint256 i; i < path.length - 1; i++) {\\n            (address input, address output) = (path[i], path[i + 1]);\\n            (address token0, ) = UniswapV2Library.sortTokens(input, output);\\n            uint256 amountOut = amounts[i + 1];\\n            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));\\n            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], pairCodeHash) : _to;\\n            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, pairCodeHash)).swap(amount0Out, amount1Out, to, new bytes(0));\\n        }\\n    }\\n}\",\"keccak256\":\"0x8017b7503a6bdd0f8f5c0f5151620e538d4d2c0383ec1d8ac502c53877b7aadf\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      }
    },
    "sources": {
      "contracts/flat/SushiSwapMultiExactSwapper.sol": {
        "ast": {
          "absolutePath": "contracts/flat/SushiSwapMultiExactSwapper.sol",
          "exportedSymbols": {
            "BoringERC20": [
              54
            ],
            "BoringMath": [
              128
            ],
            "IBentoBoxV1": [
              657
            ],
            "IERC20": [
              3
            ],
            "IUniswapV2Pair": [
              149
            ],
            "SushiSwapMultiExactSwapper": [
              1092
            ],
            "UniswapV2Library": [
              589
            ]
          },
          "id": 1093,
          "license": "GPL-3.0",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".12"
              ],
              "nodeType": "PragmaDirective",
              "src": "94:23:0"
            },
            {
              "id": 2,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "118:33:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": true,
              "id": 3,
              "linearizedBaseContracts": [
                3
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 1093,
              "src": "299:21:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 54,
              "linearizedBaseContracts": [
                54
              ],
              "name": "BoringERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 6,
                  "mutability": "constant",
                  "name": "SIG_TRANSFER",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 54,
                  "src": "457:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 4,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "457:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "30786139303539636262",
                    "id": 5,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "496:10:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2835717307_by_1",
                      "typeString": "int_const 2835717307"
                    },
                    "value": "0xa9059cbb"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 52,
                    "nodeType": "Block",
                    "src": "908:230:0",
                    "statements": [
                      {
                        "assignments": [
                          17,
                          19
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 52,
                            "src": "919:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 16,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "919:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 19,
                            "mutability": "mutable",
                            "name": "data",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 52,
                            "src": "933:17:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 18,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "933:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 32,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 27,
                                  "name": "SIG_TRANSFER",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6,
                                  "src": "997:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 28,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11,
                                  "src": "1011:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13,
                                  "src": "1015:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "974:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 26,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "974:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 30,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "974:48:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 22,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9,
                                  "src": "962:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$3",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$3",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 21,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "954:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 20,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "954:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 23,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "954:14:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 24,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "954:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 31,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "954:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "918:105:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 48,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 34,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17,
                                "src": "1041:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 46,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 38,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 35,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 19,
                                          "src": "1053:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 36,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "1053:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 37,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1068:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "1053:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "||",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 41,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 19,
                                          "src": "1084:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "id": 43,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "1091:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_bool_$",
                                                "typeString": "type(bool)"
                                              },
                                              "typeName": {
                                                "id": 42,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1091:4:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": null,
                                                  "typeString": null
                                                }
                                              }
                                            }
                                          ],
                                          "id": 44,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "1090:6:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          },
                                          {
                                            "typeIdentifier": "t_type$_t_bool_$",
                                            "typeString": "type(bool)"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 39,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "1073:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 40,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "decode",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "1073:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 45,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1073:24:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "1053:44:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 47,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1052:46:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1041:57:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e6745524332303a205472616e73666572206661696c6564",
                              "id": 49,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1100:30:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1a3f0851ddc9e157ae96e52ed9dfd71a8cb4b1cf2a73b26b9f3f9e0aa9469d27",
                                "typeString": "literal_string \"BoringERC20: Transfer failed\""
                              },
                              "value": "BoringERC20: Transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1a3f0851ddc9e157ae96e52ed9dfd71a8cb4b1cf2a73b26b9f3f9e0aa9469d27",
                                "typeString": "literal_string \"BoringERC20: Transfer failed\""
                              }
                            ],
                            "id": 33,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1033:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 50,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1033:98:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51,
                        "nodeType": "ExpressionStatement",
                        "src": "1033:98:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7,
                    "nodeType": "StructuredDocumentation",
                    "src": "542:258:0",
                    "text": "@notice Provides a safe ERC20.transfer version for different ERC-20 implementations.\n Reverts on a failed transfer.\n @param token The address of the ERC-20 token.\n @param to Transfer tokens to.\n @param amount The token amount."
                  },
                  "id": 53,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 14,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 53,
                        "src": "836:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 8,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "836:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 53,
                        "src": "858:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "858:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 53,
                        "src": "878:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "878:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "826:72:0"
                  },
                  "returnParameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "908:0:0"
                  },
                  "scope": 54,
                  "src": "805:333:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1093,
              "src": "431:709:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 55,
                "nodeType": "StructuredDocumentation",
                "src": "1250:151:0",
                "text": "@notice A library for performing overflow-/underflow-safe math,\n updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)."
              },
              "fullyImplemented": true,
              "id": 128,
              "linearizedBaseContracts": [
                128
              ],
              "name": "BoringMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 76,
                    "nodeType": "Block",
                    "src": "1495:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 72,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 69,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 65,
                                      "name": "c",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 62,
                                      "src": "1514:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 68,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 66,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 57,
                                        "src": "1518:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 67,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 59,
                                        "src": "1522:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "1518:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1514:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 70,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1513:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 71,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 59,
                                "src": "1528:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1513:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e674d6174683a20416464204f766572666c6f77",
                              "id": 73,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1531:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_77ffeda554f4c047bf45dac1a596ee270f922490aa5e98c6ba2b9599856e6fdf",
                                "typeString": "literal_string \"BoringMath: Add Overflow\""
                              },
                              "value": "BoringMath: Add Overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_77ffeda554f4c047bf45dac1a596ee270f922490aa5e98c6ba2b9599856e6fdf",
                                "typeString": "literal_string \"BoringMath: Add Overflow\""
                              }
                            ],
                            "id": 64,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1505:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 74,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1505:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 75,
                        "nodeType": "ExpressionStatement",
                        "src": "1505:53:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 77,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 60,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 57,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 77,
                        "src": "1439:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 56,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1439:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 59,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 77,
                        "src": "1450:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 58,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1450:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1438:22:0"
                  },
                  "returnParameters": {
                    "id": 63,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 62,
                        "mutability": "mutable",
                        "name": "c",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 77,
                        "src": "1484:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 61,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1484:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1483:11:0"
                  },
                  "scope": 128,
                  "src": "1426:139:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 98,
                    "nodeType": "Block",
                    "src": "1640:67:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 94,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 91,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 87,
                                      "name": "c",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 84,
                                      "src": "1659:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 90,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 88,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 79,
                                        "src": "1663:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 89,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 81,
                                        "src": "1667:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "1663:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1659:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 92,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1658:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 93,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 79,
                                "src": "1673:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1658:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e674d6174683a20556e646572666c6f77",
                              "id": 95,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1676:23:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_00354eeca4367367797d07bf5ab6743c0cc453fe689bbb72132c3c4e2b5612aa",
                                "typeString": "literal_string \"BoringMath: Underflow\""
                              },
                              "value": "BoringMath: Underflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_00354eeca4367367797d07bf5ab6743c0cc453fe689bbb72132c3c4e2b5612aa",
                                "typeString": "literal_string \"BoringMath: Underflow\""
                              }
                            ],
                            "id": 86,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1650:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 96,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1650:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 97,
                        "nodeType": "ExpressionStatement",
                        "src": "1650:50:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 99,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 82,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 79,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 99,
                        "src": "1584:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 78,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1584:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 81,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 99,
                        "src": "1595:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 80,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1595:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1583:22:0"
                  },
                  "returnParameters": {
                    "id": 85,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 84,
                        "mutability": "mutable",
                        "name": "c",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 99,
                        "src": "1629:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 83,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1629:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1628:11:0"
                  },
                  "scope": 128,
                  "src": "1571:136:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 126,
                    "nodeType": "Block",
                    "src": "1782:84:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 122,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 111,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 109,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 103,
                                  "src": "1800:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 110,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1805:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "1800:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 121,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 119,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "id": 116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 112,
                                          "name": "c",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 106,
                                          "src": "1811:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 115,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 113,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 101,
                                            "src": "1815:1:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 114,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 103,
                                            "src": "1819:1:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "1815:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "1811:9:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 117,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "1810:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 118,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 103,
                                    "src": "1824:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1810:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 120,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 101,
                                  "src": "1829:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1810:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1800:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "426f72696e674d6174683a204d756c204f766572666c6f77",
                              "id": 123,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1832:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_efa2024ddfa13946089ac6325359d421926f574cb871587fa659a82734fa675e",
                                "typeString": "literal_string \"BoringMath: Mul Overflow\""
                              },
                              "value": "BoringMath: Mul Overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_efa2024ddfa13946089ac6325359d421926f574cb871587fa659a82734fa675e",
                                "typeString": "literal_string \"BoringMath: Mul Overflow\""
                              }
                            ],
                            "id": 108,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1792:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1792:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 125,
                        "nodeType": "ExpressionStatement",
                        "src": "1792:67:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 127,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 104,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 101,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 127,
                        "src": "1726:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 100,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1726:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 103,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 127,
                        "src": "1737:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 102,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1737:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1725:22:0"
                  },
                  "returnParameters": {
                    "id": 107,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 106,
                        "mutability": "mutable",
                        "name": "c",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 127,
                        "src": "1771:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1771:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1770:11:0"
                  },
                  "scope": 128,
                  "src": "1713:153:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1093,
              "src": "1401:467:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 149,
              "linearizedBaseContracts": [
                149
              ],
              "name": "IUniswapV2Pair",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "0902f1ac",
                  "id": 137,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getReserves",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 129,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2034:2:0"
                  },
                  "returnParameters": {
                    "id": 136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 131,
                        "mutability": "mutable",
                        "name": "reserve0",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 137,
                        "src": "2097:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "2097:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 133,
                        "mutability": "mutable",
                        "name": "reserve1",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 137,
                        "src": "2127:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 132,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "2127:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 135,
                        "mutability": "mutable",
                        "name": "blockTimestampLast",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 137,
                        "src": "2157:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 134,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2157:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2083:109:0"
                  },
                  "scope": 149,
                  "src": "2014:179:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "022c0d9f",
                  "id": 148,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 139,
                        "mutability": "mutable",
                        "name": "amount0Out",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 148,
                        "src": "2222:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 138,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2222:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 141,
                        "mutability": "mutable",
                        "name": "amount1Out",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 148,
                        "src": "2250:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 140,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2250:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 143,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 148,
                        "src": "2278:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 142,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2278:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 145,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 148,
                        "src": "2298:19:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 144,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2298:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2212:111:0"
                  },
                  "returnParameters": {
                    "id": 147,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2332:0:0"
                  },
                  "scope": 149,
                  "src": "2199:134:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1093,
              "src": "1983:352:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 589,
              "linearizedBaseContracts": [
                589
              ],
              "name": "UniswapV2Library",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 152,
                  "libraryName": {
                    "contractScope": null,
                    "id": 150,
                    "name": "BoringMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 128,
                    "src": "2455:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BoringMath_$128",
                      "typeString": "library BoringMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "2449:29:0",
                  "typeName": {
                    "id": 151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2470:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "body": {
                    "id": 195,
                    "nodeType": "Block",
                    "src": "2691:238:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 164,
                                "name": "tokenA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 154,
                                "src": "2709:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 165,
                                "name": "tokenB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 156,
                                "src": "2719:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2709:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553",
                              "id": 167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2727:39:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4ddc3ca35a8b7ccaa016ab70252fdf3396ded4f4fd8375f95b1e9d99790fcdca",
                                "typeString": "literal_string \"UniswapV2Library: IDENTICAL_ADDRESSES\""
                              },
                              "value": "UniswapV2Library: IDENTICAL_ADDRESSES"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4ddc3ca35a8b7ccaa016ab70252fdf3396ded4f4fd8375f95b1e9d99790fcdca",
                                "typeString": "literal_string \"UniswapV2Library: IDENTICAL_ADDRESSES\""
                              }
                            ],
                            "id": 163,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2701:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2701:66:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 169,
                        "nodeType": "ExpressionStatement",
                        "src": "2701:66:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 170,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 159,
                                "src": "2778:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 171,
                                "name": "token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 161,
                                "src": "2786:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 172,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "2777:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 175,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 173,
                                "name": "tokenA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 154,
                                "src": "2796:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 174,
                                "name": "tokenB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 156,
                                "src": "2805:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2796:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 179,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 156,
                                  "src": "2834:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 180,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 154,
                                  "src": "2842:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 181,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2833:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "id": 182,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "2796:53:0",
                            "trueExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 176,
                                  "name": "tokenA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 154,
                                  "src": "2815:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 177,
                                  "name": "tokenB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 156,
                                  "src": "2823:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "id": 178,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2814:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                "typeString": "tuple(address,address)"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "src": "2777:72:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 184,
                        "nodeType": "ExpressionStatement",
                        "src": "2777:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 186,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 159,
                                "src": "2867:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 189,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2885:1:0",
                                    "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": 188,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2877:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 187,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2877:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 190,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2877:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "2867:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a205a45524f5f41444452455353",
                              "id": 192,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2889:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_db0dda5a73ac3122e17df097fa2cbce2c5161b45d20c7d6cf363d3b147392c83",
                                "typeString": "literal_string \"UniswapV2Library: ZERO_ADDRESS\""
                              },
                              "value": "UniswapV2Library: ZERO_ADDRESS"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_db0dda5a73ac3122e17df097fa2cbce2c5161b45d20c7d6cf363d3b147392c83",
                                "typeString": "literal_string \"UniswapV2Library: ZERO_ADDRESS\""
                              }
                            ],
                            "id": 185,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2859:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2859:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 194,
                        "nodeType": "ExpressionStatement",
                        "src": "2859:63:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 196,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sortTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 154,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 196,
                        "src": "2604:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 153,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2604:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 156,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 196,
                        "src": "2620:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 155,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2620:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2603:32:0"
                  },
                  "returnParameters": {
                    "id": 162,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 159,
                        "mutability": "mutable",
                        "name": "token0",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 196,
                        "src": "2659:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 158,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2659:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 161,
                        "mutability": "mutable",
                        "name": "token1",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 196,
                        "src": "2675:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 160,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2675:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2658:32:0"
                  },
                  "scope": 589,
                  "src": "2584:345:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 242,
                    "nodeType": "Block",
                    "src": "3181:443:0",
                    "statements": [
                      {
                        "assignments": [
                          210,
                          212
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 210,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 242,
                            "src": "3192:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 209,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3192:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 212,
                            "mutability": "mutable",
                            "name": "token1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 242,
                            "src": "3208:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 211,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3208:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 217,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 214,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 200,
                              "src": "3237:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 215,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 202,
                              "src": "3245:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 213,
                            "name": "sortTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 196,
                            "src": "3226:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                              "typeString": "function (address,address) pure returns (address,address)"
                            }
                          },
                          "id": 216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3226:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3191:61:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 218,
                            "name": "pair",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 207,
                            "src": "3262:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "ff",
                                            "id": 226,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "string",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3388:7:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                              "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                            },
                                            "value": null
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 227,
                                            "name": "factory",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 198,
                                            "src": "3421:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "arguments": [
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 231,
                                                    "name": "token0",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 210,
                                                    "src": "3481:6:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 232,
                                                    "name": "token1",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 212,
                                                    "src": "3489:6:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": null,
                                                    "id": 229,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "3464:3:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_abi",
                                                      "typeString": "abi"
                                                    }
                                                  },
                                                  "id": 230,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberName": "encodePacked",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": null,
                                                  "src": "3464:16:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function () pure returns (bytes memory)"
                                                  }
                                                },
                                                "id": 233,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3464:32:0",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "id": 228,
                                              "name": "keccak256",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -8,
                                              "src": "3454:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                              }
                                            },
                                            "id": 234,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3454:43:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 235,
                                            "name": "pairCodeHash",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 204,
                                            "src": "3523:12:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9",
                                              "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)"
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 224,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -1,
                                            "src": "3346:3:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 225,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "3346:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3346:229:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 223,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -8,
                                      "src": "3315:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 237,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3315:278:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3290:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 221,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3290:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3290:317:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3269:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 219,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3269:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3269:348:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3262:355:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 241,
                        "nodeType": "ExpressionStatement",
                        "src": "3262:355:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 243,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pairFor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 198,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "3044:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3044:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 200,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "3069:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3069:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 202,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "3093:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 201,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3093:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 204,
                        "mutability": "mutable",
                        "name": "pairCodeHash",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "3117:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 203,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3117:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3034:109:0"
                  },
                  "returnParameters": {
                    "id": 208,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 207,
                        "mutability": "mutable",
                        "name": "pair",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 243,
                        "src": "3167:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 206,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3167:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3166:14:0"
                  },
                  "scope": 589,
                  "src": "3018:606:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 295,
                    "nodeType": "Block",
                    "src": "3868:286:0",
                    "statements": [
                      {
                        "assignments": [
                          259,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 259,
                            "mutability": "mutable",
                            "name": "token0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 295,
                            "src": "3879:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 258,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3879:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 264,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 261,
                              "name": "tokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 247,
                              "src": "3910:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 262,
                              "name": "tokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 249,
                              "src": "3918:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 260,
                            "name": "sortTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 196,
                            "src": "3899:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                              "typeString": "function (address,address) pure returns (address,address)"
                            }
                          },
                          "id": 263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3899:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3878:47:0"
                      },
                      {
                        "assignments": [
                          266,
                          268,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 266,
                            "mutability": "mutable",
                            "name": "reserve0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 295,
                            "src": "3936:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 265,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3936:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 268,
                            "mutability": "mutable",
                            "name": "reserve1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 295,
                            "src": "3954:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 267,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3954:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 279,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 271,
                                      "name": "factory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 245,
                                      "src": "3999:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 272,
                                      "name": "tokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 247,
                                      "src": "4008:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 273,
                                      "name": "tokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 249,
                                      "src": "4016:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 274,
                                      "name": "pairCodeHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 251,
                                      "src": "4024:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 270,
                                    "name": "pairFor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 243,
                                    "src": "3991:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bytes32_$returns$_t_address_$",
                                      "typeString": "function (address,address,address,bytes32) pure returns (address)"
                                    }
                                  },
                                  "id": 275,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3991:46:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 269,
                                "name": "IUniswapV2Pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 149,
                                "src": "3976:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$149_$",
                                  "typeString": "type(contract IUniswapV2Pair)"
                                }
                              },
                              "id": 276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3976:62:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV2Pair_$149",
                                "typeString": "contract IUniswapV2Pair"
                              }
                            },
                            "id": 277,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getReserves",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 137,
                            "src": "3976:74:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$",
                              "typeString": "function () view external returns (uint112,uint112,uint32)"
                            }
                          },
                          "id": 278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3976:76:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$",
                            "typeString": "tuple(uint112,uint112,uint32)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3935:117:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 280,
                                "name": "reserveA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 254,
                                "src": "4063:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 281,
                                "name": "reserveB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 256,
                                "src": "4073:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 282,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "4062:20:0",
                            "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": 285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 283,
                                "name": "tokenA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 247,
                                "src": "4085:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 284,
                                "name": "token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 259,
                                "src": "4095:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4085:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 289,
                                  "name": "reserve1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 268,
                                  "src": "4128:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 290,
                                  "name": "reserve0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 266,
                                  "src": "4138:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 291,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4127:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "id": 292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "4085:62:0",
                            "trueExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 286,
                                  "name": "reserve0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 266,
                                  "src": "4105:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 287,
                                  "name": "reserve1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 268,
                                  "src": "4115:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 288,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4104:20:0",
                              "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": "4062:85:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 294,
                        "nodeType": "ExpressionStatement",
                        "src": "4062:85:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 296,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getReserves",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 245,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "3709:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3709:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 247,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "3734:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 246,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3734:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 249,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "3758:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3758:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 251,
                        "mutability": "mutable",
                        "name": "pairCodeHash",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "3782:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 250,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3782:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3699:109:0"
                  },
                  "returnParameters": {
                    "id": 257,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 254,
                        "mutability": "mutable",
                        "name": "reserveA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "3832:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 253,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3832:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 256,
                        "mutability": "mutable",
                        "name": "reserveB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "3850:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 255,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3850:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3831:36:0"
                  },
                  "scope": 589,
                  "src": "3679:475:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 355,
                    "nodeType": "Block",
                    "src": "4428:410:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 308,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 298,
                                "src": "4446:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4457:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "4446:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54",
                              "id": 311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4460:45:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ec21b006eb37ef20d0f4abcabd34de6854fa68af48294244e0263dc05c1dbbae",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\""
                              },
                              "value": "UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ec21b006eb37ef20d0f4abcabd34de6854fa68af48294244e0263dc05c1dbbae",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT\""
                              }
                            ],
                            "id": 307,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4438:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4438:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 313,
                        "nodeType": "ExpressionStatement",
                        "src": "4438:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 321,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 317,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 315,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 300,
                                  "src": "4524:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4536:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "4524:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 320,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 318,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 302,
                                  "src": "4541:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4554:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "4541:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "4524:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459",
                              "id": 322,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4557:42:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7e8d6b265173dbbd87b3b9e2bf4238bea6caf2b2bbeb63f859a738aec9e761c8",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_LIQUIDITY\""
                              },
                              "value": "UniswapV2Library: INSUFFICIENT_LIQUIDITY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7e8d6b265173dbbd87b3b9e2bf4238bea6caf2b2bbeb63f859a738aec9e761c8",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_LIQUIDITY\""
                              }
                            ],
                            "id": 314,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4516:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4516:84:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 324,
                        "nodeType": "ExpressionStatement",
                        "src": "4516:84:0"
                      },
                      {
                        "assignments": [
                          326
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 326,
                            "mutability": "mutable",
                            "name": "amountInWithFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 355,
                            "src": "4610:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 325,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4610:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 331,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "393937",
                              "id": 329,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4649:3:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              },
                              "value": "997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 327,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 298,
                              "src": "4636:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 127,
                            "src": "4636:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4636:17:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4610:43:0"
                      },
                      {
                        "assignments": [
                          333
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 333,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 355,
                            "src": "4663:17:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 332,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4663:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 338,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 336,
                              "name": "reserveOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 302,
                              "src": "4703:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 334,
                              "name": "amountInWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 326,
                              "src": "4683:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 127,
                            "src": "4683:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4683:31:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4663:51:0"
                      },
                      {
                        "assignments": [
                          340
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 340,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 355,
                            "src": "4724:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 339,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4724:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 348,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 346,
                              "name": "amountInWithFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 326,
                              "src": "4770:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "31303030",
                                  "id": 343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4760:4:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1000_by_1",
                                    "typeString": "int_const 1000"
                                  },
                                  "value": "1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1000_by_1",
                                    "typeString": "int_const 1000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 341,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 300,
                                  "src": "4746:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 342,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 127,
                                "src": "4746:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4746:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 77,
                            "src": "4746:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4746:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4724:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 349,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 305,
                            "src": "4796:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 350,
                              "name": "numerator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 333,
                              "src": "4808:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 351,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 340,
                              "src": "4820:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4808:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4796:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 354,
                        "nodeType": "ExpressionStatement",
                        "src": "4796:35:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 356,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 303,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 298,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 356,
                        "src": "4308:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 297,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4308:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "reserveIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 356,
                        "src": "4334:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4334:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 302,
                        "mutability": "mutable",
                        "name": "reserveOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 356,
                        "src": "4361:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 301,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4361:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4298:87:0"
                  },
                  "returnParameters": {
                    "id": 306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 305,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 356,
                        "src": "4409:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4409:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4408:19:0"
                  },
                  "scope": 589,
                  "src": "4277:561:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 439,
                    "nodeType": "Block",
                    "src": "5107:405:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 372,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 363,
                                  "src": "5125:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 373,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "5125:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5140:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "5125:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a20494e56414c49445f50415448",
                              "id": 376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5143:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_75377551ce0fccd63c5f6648306f9f916607f3ae50cffb38430d29ad981b8222",
                                "typeString": "literal_string \"UniswapV2Library: INVALID_PATH\""
                              },
                              "value": "UniswapV2Library: INVALID_PATH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_75377551ce0fccd63c5f6648306f9f916607f3ae50cffb38430d29ad981b8222",
                                "typeString": "literal_string \"UniswapV2Library: INVALID_PATH\""
                              }
                            ],
                            "id": 371,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5117:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5117:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 378,
                        "nodeType": "ExpressionStatement",
                        "src": "5117:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 379,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 369,
                            "src": "5186:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 383,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 363,
                                  "src": "5210:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "5210:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 382,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "5196:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint256[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 380,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5200:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 381,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "5200:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                  "typeString": "uint256[]"
                                }
                              }
                            },
                            "id": 385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5196:26:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "src": "5186:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 387,
                        "nodeType": "ExpressionStatement",
                        "src": "5186:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 388,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 369,
                              "src": "5232:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 390,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5240:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5232:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 391,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 360,
                            "src": "5245:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5232:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 393,
                        "nodeType": "ExpressionStatement",
                        "src": "5232:21:0"
                      },
                      {
                        "body": {
                          "id": 437,
                          "nodeType": "Block",
                          "src": "5305:201:0",
                          "statements": [
                            {
                              "assignments": [
                                407,
                                409
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 407,
                                  "mutability": "mutable",
                                  "name": "reserveIn",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 437,
                                  "src": "5320:17:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 406,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5320:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 409,
                                  "mutability": "mutable",
                                  "name": "reserveOut",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 437,
                                  "src": "5339:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 408,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5339:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 422,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 411,
                                    "name": "factory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 358,
                                    "src": "5373:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 412,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 363,
                                      "src": "5382:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 414,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 413,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "5387:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5382:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 415,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 363,
                                      "src": "5391:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 419,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 418,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 416,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 395,
                                        "src": "5396:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 417,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5400:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "5396:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5391:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 420,
                                    "name": "pairCodeHash",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 365,
                                    "src": "5404:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 410,
                                  "name": "getReserves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 296,
                                  "src": "5361:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_bytes32_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (address,address,address,bytes32) view returns (uint256,uint256)"
                                  }
                                },
                                "id": 421,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5361:56:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5319:98:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 435,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 423,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 369,
                                    "src": "5431:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 427,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 426,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 424,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 395,
                                      "src": "5439:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 425,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5443:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "5439:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "5431:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 429,
                                        "name": "amounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 369,
                                        "src": "5461:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 431,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 430,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 395,
                                        "src": "5469:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5461:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 432,
                                      "name": "reserveIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 407,
                                      "src": "5473:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 433,
                                      "name": "reserveOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 409,
                                      "src": "5484:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 428,
                                    "name": "getAmountOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 356,
                                    "src": "5448:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 434,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5448:47:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5431:64:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 436,
                              "nodeType": "ExpressionStatement",
                              "src": "5431:64:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 397,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 395,
                            "src": "5279:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 401,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 398,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 363,
                                "src": "5283:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "5283:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 400,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5297:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "5283:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5279:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 438,
                        "initializationExpression": {
                          "assignments": [
                            395
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 395,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 438,
                              "src": "5268:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 394,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5268:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 396,
                          "initialValue": null,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5268:9:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 404,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5300:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 403,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 395,
                              "src": "5300:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 405,
                          "nodeType": "ExpressionStatement",
                          "src": "5300:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "5263:243:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 440,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountsOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 366,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 358,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 440,
                        "src": "4949:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 357,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4949:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 360,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 440,
                        "src": "4974:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 359,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4974:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 363,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 440,
                        "src": "5000:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 361,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5000:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 362,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "5000:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 365,
                        "mutability": "mutable",
                        "name": "pairCodeHash",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 440,
                        "src": "5031:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 364,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5031:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4939:118:0"
                  },
                  "returnParameters": {
                    "id": 370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 369,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 440,
                        "src": "5081:24:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 367,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "5081:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 368,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "5081:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5080:26:0"
                  },
                  "scope": 589,
                  "src": "4917:595:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 499,
                    "nodeType": "Block",
                    "src": "5738:358:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 452,
                                "name": "amountOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 442,
                                "src": "5756:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 453,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5768:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "5756:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54",
                              "id": 455,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5771:46:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35fb781059090c30aacad20e29b2e40e67f217617fc46f86031ed4eb14923a82",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT\""
                              },
                              "value": "UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_35fb781059090c30aacad20e29b2e40e67f217617fc46f86031ed4eb14923a82",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT\""
                              }
                            ],
                            "id": 451,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5748:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 456,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5748:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 457,
                        "nodeType": "ExpressionStatement",
                        "src": "5748:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 465,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 461,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 459,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 444,
                                  "src": "5836:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 460,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5848:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "5836:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 464,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 462,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 446,
                                  "src": "5853:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 463,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5866:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "5853:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "5836:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459",
                              "id": 466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5869:42:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7e8d6b265173dbbd87b3b9e2bf4238bea6caf2b2bbeb63f859a738aec9e761c8",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_LIQUIDITY\""
                              },
                              "value": "UniswapV2Library: INSUFFICIENT_LIQUIDITY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7e8d6b265173dbbd87b3b9e2bf4238bea6caf2b2bbeb63f859a738aec9e761c8",
                                "typeString": "literal_string \"UniswapV2Library: INSUFFICIENT_LIQUIDITY\""
                              }
                            ],
                            "id": 458,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5828:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5828:84:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 468,
                        "nodeType": "ExpressionStatement",
                        "src": "5828:84:0"
                      },
                      {
                        "assignments": [
                          470
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 470,
                            "mutability": "mutable",
                            "name": "numerator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 499,
                            "src": "5922:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 469,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5922:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 478,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31303030",
                              "id": 476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5968:4:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              },
                              "value": "1000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 473,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 442,
                                  "src": "5953:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 471,
                                  "name": "reserveIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 444,
                                  "src": "5939:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 472,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 127,
                                "src": "5939:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 474,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5939:24:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 475,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 127,
                            "src": "5939:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5939:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5922:51:0"
                      },
                      {
                        "assignments": [
                          480
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 480,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 499,
                            "src": "5983:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 479,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5983:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 488,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "393937",
                              "id": 486,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6032:3:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              },
                              "value": "997"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_997_by_1",
                                "typeString": "int_const 997"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 483,
                                  "name": "amountOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 442,
                                  "src": "6017:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 481,
                                  "name": "reserveOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 446,
                                  "src": "6002:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 482,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 99,
                                "src": "6002:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6002:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 127,
                            "src": "6002:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6002:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5983:53:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 489,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 449,
                            "src": "6046:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6087:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 492,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 490,
                                      "name": "numerator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 470,
                                      "src": "6058:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 491,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 480,
                                      "src": "6070:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6058:23:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 493,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6057:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 77,
                              "src": "6057:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6057:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6046:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 498,
                        "nodeType": "ExpressionStatement",
                        "src": "6046:43:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 500,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountIn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 447,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 442,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 500,
                        "src": "5651:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 441,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "5651:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 444,
                        "mutability": "mutable",
                        "name": "reserveIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 500,
                        "src": "5667:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 443,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "5667:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 446,
                        "mutability": "mutable",
                        "name": "reserveOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 500,
                        "src": "5683:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 445,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "5683:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5650:49:0"
                  },
                  "returnParameters": {
                    "id": 450,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 449,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 500,
                        "src": "5723:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 448,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "5723:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5722:15:0"
                  },
                  "scope": 589,
                  "src": "5630:466:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 587,
                    "nodeType": "Block",
                    "src": "6324:414:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 516,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 507,
                                  "src": "6342:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 517,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "6342:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6357:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "6342:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e697377617056324c6962726172793a20494e56414c49445f50415448",
                              "id": 520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6360:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_75377551ce0fccd63c5f6648306f9f916607f3ae50cffb38430d29ad981b8222",
                                "typeString": "literal_string \"UniswapV2Library: INVALID_PATH\""
                              },
                              "value": "UniswapV2Library: INVALID_PATH"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_75377551ce0fccd63c5f6648306f9f916607f3ae50cffb38430d29ad981b8222",
                                "typeString": "literal_string \"UniswapV2Library: INVALID_PATH\""
                              }
                            ],
                            "id": 515,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6334:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6334:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 522,
                        "nodeType": "ExpressionStatement",
                        "src": "6334:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 523,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 513,
                            "src": "6403:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 527,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 507,
                                  "src": "6424:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 528,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "6424:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 526,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "6413:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (uint256[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 524,
                                  "name": "uint",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6417:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 525,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "6417:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                  "typeString": "uint256[]"
                                }
                              }
                            },
                            "id": 529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6413:23:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "src": "6403:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 531,
                        "nodeType": "ExpressionStatement",
                        "src": "6403:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 532,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 513,
                              "src": "6446:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 537,
                            "indexExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 533,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 513,
                                  "src": "6454:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "6454:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 535,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6471:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "6454:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6446:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 538,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 504,
                            "src": "6476:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6446:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 540,
                        "nodeType": "ExpressionStatement",
                        "src": "6446:39:0"
                      },
                      {
                        "body": {
                          "id": 585,
                          "nodeType": "Block",
                          "src": "6538:194:0",
                          "statements": [
                            {
                              "assignments": [
                                555,
                                557
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 555,
                                  "mutability": "mutable",
                                  "name": "reserveIn",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 585,
                                  "src": "6553:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 554,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6553:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 557,
                                  "mutability": "mutable",
                                  "name": "reserveOut",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 585,
                                  "src": "6569:15:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 556,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6569:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 570,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 559,
                                    "name": "factory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 502,
                                    "src": "6600:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 560,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 507,
                                      "src": "6609:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 564,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 563,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 561,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 542,
                                        "src": "6614:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 562,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6618:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "6614:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6609:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 565,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 507,
                                      "src": "6622:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 567,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 566,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 542,
                                      "src": "6627:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6622:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 568,
                                    "name": "pairCodeHash",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 509,
                                    "src": "6631:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 558,
                                  "name": "getReserves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 296,
                                  "src": "6588:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_bytes32_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (address,address,address,bytes32) view returns (uint256,uint256)"
                                  }
                                },
                                "id": 569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6588:56:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6552:92:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 583,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 571,
                                    "name": "amounts",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 513,
                                    "src": "6658:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 575,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 574,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 572,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 542,
                                      "src": "6666:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 573,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6670:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "6666:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "6658:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 577,
                                        "name": "amounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 513,
                                        "src": "6687:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      },
                                      "id": 579,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 578,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 542,
                                        "src": "6695:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "6687:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 580,
                                      "name": "reserveIn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 555,
                                      "src": "6699:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 581,
                                      "name": "reserveOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 557,
                                      "src": "6710:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 576,
                                    "name": "getAmountIn",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 500,
                                    "src": "6675:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 582,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6675:46:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6658:63:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 584,
                              "nodeType": "ExpressionStatement",
                              "src": "6658:63:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 548,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 542,
                            "src": "6526:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6530:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6526:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 586,
                        "initializationExpression": {
                          "assignments": [
                            542
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 542,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 586,
                              "src": "6500:6:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 541,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "6500:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 547,
                          "initialValue": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 543,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 507,
                                "src": "6509:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6509:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6523:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "6509:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "6500:24:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": false,
                            "src": "6533:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 551,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 542,
                              "src": "6533:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 553,
                          "nodeType": "ExpressionStatement",
                          "src": "6533:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "6495:237:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 588,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountsIn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 510,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 502,
                        "mutability": "mutable",
                        "name": "factory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 588,
                        "src": "6200:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 501,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6200:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 504,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 588,
                        "src": "6217:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 503,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "6217:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 507,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 588,
                        "src": "6233:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 505,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6233:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 506,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "6233:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 509,
                        "mutability": "mutable",
                        "name": "pairCodeHash",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 588,
                        "src": "6256:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 508,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6256:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6199:78:0"
                  },
                  "returnParameters": {
                    "id": 514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 513,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 588,
                        "src": "6301:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 511,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "6301:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 512,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "6301:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6300:23:0"
                  },
                  "scope": 589,
                  "src": "6178:560:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1093,
              "src": "2418:4322:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 657,
              "linearizedBaseContracts": [
                657
              ],
              "name": "IBentoBoxV1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "02b9446c",
                  "id": 606,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 600,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 591,
                        "mutability": "mutable",
                        "name": "token_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "6889:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 590,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "6889:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 593,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "6912:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 592,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6912:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 595,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "6934:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 594,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6934:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 597,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "6954:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 596,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6954:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 599,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "6978:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 598,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6978:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6879:118:0"
                  },
                  "returnParameters": {
                    "id": 605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 602,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "7024:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 601,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7024:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 604,
                        "mutability": "mutable",
                        "name": "shareOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 606,
                        "src": "7043:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 603,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7043:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7023:37:0"
                  },
                  "scope": 657,
                  "src": "6863:198:0",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "56623118",
                  "id": 617,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 613,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 608,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "7094:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 607,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "7094:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 610,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "7116:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 609,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7116:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 612,
                        "mutability": "mutable",
                        "name": "roundUp",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "7139:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 611,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7139:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7084:73:0"
                  },
                  "returnParameters": {
                    "id": 616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 615,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "7181:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 614,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7181:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7180:16:0"
                  },
                  "scope": 657,
                  "src": "7067:130:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "da5139ca",
                  "id": 628,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toShare",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 624,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 619,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 628,
                        "src": "7233:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 618,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "7233:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 621,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 628,
                        "src": "7255:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 620,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7255:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 623,
                        "mutability": "mutable",
                        "name": "roundUp",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 628,
                        "src": "7279:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 622,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7279:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7223:74:0"
                  },
                  "returnParameters": {
                    "id": 627,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 626,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 628,
                        "src": "7321:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 625,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7321:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7320:15:0"
                  },
                  "scope": 657,
                  "src": "7207:129:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "f18d03cc",
                  "id": 639,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 637,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 630,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "7373:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 629,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "7373:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 632,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "7395:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 631,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7395:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 634,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "7417:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 633,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7417:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 636,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "7437:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 635,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7437:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7363:93:0"
                  },
                  "returnParameters": {
                    "id": 638,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7465:0:0"
                  },
                  "scope": 657,
                  "src": "7346:120:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "97da6d30",
                  "id": 656,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 650,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 641,
                        "mutability": "mutable",
                        "name": "token_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7499:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 640,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "7499:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 643,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7522:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 642,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7522:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 645,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7544:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 644,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7544:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 647,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7564:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 646,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7564:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 649,
                        "mutability": "mutable",
                        "name": "share",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7588:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 648,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7588:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7489:118:0"
                  },
                  "returnParameters": {
                    "id": 655,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 652,
                        "mutability": "mutable",
                        "name": "amountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7626:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 651,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7626:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 654,
                        "mutability": "mutable",
                        "name": "shareOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 656,
                        "src": "7645:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 653,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7645:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7625:37:0"
                  },
                  "scope": 657,
                  "src": "7472:191:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 1093,
              "src": "6835:830:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 1092,
              "linearizedBaseContracts": [
                1092
              ],
              "name": "SushiSwapMultiExactSwapper",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 660,
                  "libraryName": {
                    "contractScope": null,
                    "id": 658,
                    "name": "BoringERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 54,
                    "src": "7800:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BoringERC20_$54",
                      "typeString": "library BoringERC20"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "7794:29:0",
                  "typeName": {
                    "contractScope": null,
                    "id": 659,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3,
                    "src": "7816:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "id": 663,
                  "libraryName": {
                    "contractScope": null,
                    "id": 661,
                    "name": "BoringMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 128,
                    "src": "7834:10:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BoringMath_$128",
                      "typeString": "library BoringMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "7828:29:0",
                  "typeName": {
                    "id": 662,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7849:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 665,
                  "mutability": "immutable",
                  "name": "factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1092,
                  "src": "7863:33:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 664,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7863:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 667,
                  "mutability": "immutable",
                  "name": "bentoBox",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1092,
                  "src": "7902:38:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                    "typeString": "contract IBentoBoxV1"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 666,
                    "name": "IBentoBoxV1",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 657,
                    "src": "7902:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                      "typeString": "contract IBentoBoxV1"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 669,
                  "mutability": "immutable",
                  "name": "pairCodeHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1092,
                  "src": "7946:38:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 668,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7946:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 690,
                    "nodeType": "Block",
                    "src": "8104:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 678,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 665,
                            "src": "8114:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 679,
                            "name": "_factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 671,
                            "src": "8124:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "8114:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 681,
                        "nodeType": "ExpressionStatement",
                        "src": "8114:18:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 682,
                            "name": "bentoBox",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 667,
                            "src": "8142:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                              "typeString": "contract IBentoBoxV1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 683,
                            "name": "_bentoBox",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 673,
                            "src": "8153:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                              "typeString": "contract IBentoBoxV1"
                            }
                          },
                          "src": "8142:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                            "typeString": "contract IBentoBoxV1"
                          }
                        },
                        "id": 685,
                        "nodeType": "ExpressionStatement",
                        "src": "8142:20:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 686,
                            "name": "pairCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 669,
                            "src": "8172:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 687,
                            "name": "_pairCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 675,
                            "src": "8187:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8172:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 689,
                        "nodeType": "ExpressionStatement",
                        "src": "8172:28:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 691,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 676,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 671,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 691,
                        "src": "8012:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 670,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8012:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 673,
                        "mutability": "mutable",
                        "name": "_bentoBox",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 691,
                        "src": "8038:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                          "typeString": "contract IBentoBoxV1"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 672,
                          "name": "IBentoBoxV1",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 657,
                          "src": "8038:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                            "typeString": "contract IBentoBoxV1"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 675,
                        "mutability": "mutable",
                        "name": "_pairCodeHash",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 691,
                        "src": "8069:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 674,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "8069:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8002:94:0"
                  },
                  "returnParameters": {
                    "id": 677,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8104:0:0"
                  },
                  "scope": 1092,
                  "src": "7991:216:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 731,
                    "nodeType": "Block",
                    "src": "8364:217:0",
                    "statements": [
                      {
                        "assignments": [
                          704
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 704,
                            "mutability": "mutable",
                            "name": "amountOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 731,
                            "src": "8374:17:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 703,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8374:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 711,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 707,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 693,
                              "src": "8412:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 708,
                              "name": "shareOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 698,
                              "src": "8422:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8432:4:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 705,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 667,
                              "src": "8394:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 617,
                            "src": "8394:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_contract$_IERC20_$3_$_t_uint256_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20,uint256,bool) view external returns (uint256)"
                            }
                          },
                          "id": 710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8394:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8374:63:0"
                      },
                      {
                        "assignments": [
                          716
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 716,
                            "mutability": "mutable",
                            "name": "amounts",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 731,
                            "src": "8447:24:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 714,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "8447:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 715,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "8447:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 724,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 719,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 665,
                              "src": "8504:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 720,
                              "name": "amountOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 704,
                              "src": "8513:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 721,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 696,
                              "src": "8524:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 722,
                              "name": "pairCodeHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 669,
                              "src": "8530:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 717,
                              "name": "UniswapV2Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "8474:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UniswapV2Library_$589_$",
                                "typeString": "type(library UniswapV2Library)"
                              }
                            },
                            "id": 718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAmountsIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 588,
                            "src": "8474:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_bytes32_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (address,uint256,address[] memory,bytes32) view returns (uint256[] memory)"
                            }
                          },
                          "id": 723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8474:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8447:96:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 725,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 701,
                            "src": "8553:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 726,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 716,
                              "src": "8564:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 728,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 727,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8572:1:0",
                              "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": "8564:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8553:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 730,
                        "nodeType": "ExpressionStatement",
                        "src": "8553:21:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "1e2e4ebc",
                  "id": 732,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInputAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 699,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 693,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 732,
                        "src": "8246:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 692,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "8246:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 696,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 732,
                        "src": "8271:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 694,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8271:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 695,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "8271:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 698,
                        "mutability": "mutable",
                        "name": "shareOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 732,
                        "src": "8302:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 697,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8302:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8236:88:0"
                  },
                  "returnParameters": {
                    "id": 702,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 701,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 732,
                        "src": "8346:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 700,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8346:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8345:18:0"
                  },
                  "scope": 1092,
                  "src": "8213:368:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 942,
                    "nodeType": "Block",
                    "src": "8829:1142:0",
                    "statements": [
                      {
                        "assignments": [
                          757
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 757,
                            "mutability": "mutable",
                            "name": "path",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 942,
                            "src": "8839:21:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 755,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8839:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 756,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "8839:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 758,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8839:21:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 759,
                            "name": "path2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 742,
                            "src": "8874:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 762,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8891:1:0",
                                "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": 761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8883:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 760,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8883:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8883:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "8874:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 844,
                          "nodeType": "Block",
                          "src": "9191:147:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 815,
                                  "name": "path",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 757,
                                  "src": "9205:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "34",
                                      "id": 819,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9226:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      }
                                    ],
                                    "id": 818,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "NewExpression",
                                    "src": "9212:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                      "typeString": "function (uint256) pure returns (address[] memory)"
                                    },
                                    "typeName": {
                                      "baseType": {
                                        "id": 816,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9216:7:0",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 817,
                                      "length": null,
                                      "nodeType": "ArrayTypeName",
                                      "src": "9216:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                        "typeString": "address[]"
                                      }
                                    }
                                  },
                                  "id": 820,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9212:16:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "src": "9205:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 822,
                              "nodeType": "ExpressionStatement",
                              "src": "9205:23:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 827,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 823,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 757,
                                    "src": "9242:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 825,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 824,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9247:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "9242:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 826,
                                  "name": "path1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 740,
                                  "src": "9252:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "9242:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 828,
                              "nodeType": "ExpressionStatement",
                              "src": "9242:15:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 833,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 829,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 757,
                                    "src": "9271:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 831,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 830,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9276:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "9271:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 832,
                                  "name": "path2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 742,
                                  "src": "9281:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "9271:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 834,
                              "nodeType": "ExpressionStatement",
                              "src": "9271:15:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 842,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 835,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 757,
                                    "src": "9300:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 837,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "33",
                                    "id": 836,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9305:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_3_by_1",
                                      "typeString": "int_const 3"
                                    },
                                    "value": "3"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "9300:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 840,
                                      "name": "tokenOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 736,
                                      "src": "9318:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$3",
                                        "typeString": "contract IERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IERC20_$3",
                                        "typeString": "contract IERC20"
                                      }
                                    ],
                                    "id": 839,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "9310:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 838,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "9310:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 841,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9310:17:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "9300:27:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 843,
                              "nodeType": "ExpressionStatement",
                              "src": "9300:27:0"
                            }
                          ]
                        },
                        "id": 845,
                        "nodeType": "IfStatement",
                        "src": "8870:468:0",
                        "trueBody": {
                          "id": 814,
                          "nodeType": "Block",
                          "src": "8895:290:0",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 770,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 765,
                                  "name": "path1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 740,
                                  "src": "8913:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 768,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8930:1:0",
                                      "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": 767,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8922:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 766,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8922:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 769,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8922:10:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "8913:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 812,
                                "nodeType": "Block",
                                "src": "9041:134:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 795,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 789,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 757,
                                        "src": "9059:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "33",
                                            "id": 793,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9080:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            },
                                            "value": "3"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            }
                                          ],
                                          "id": 792,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "NewExpression",
                                          "src": "9066:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                            "typeString": "function (uint256) pure returns (address[] memory)"
                                          },
                                          "typeName": {
                                            "baseType": {
                                              "id": 790,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "9070:7:0",
                                              "stateMutability": "nonpayable",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "id": 791,
                                            "length": null,
                                            "nodeType": "ArrayTypeName",
                                            "src": "9070:9:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                              "typeString": "address[]"
                                            }
                                          }
                                        },
                                        "id": 794,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9066:16:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "src": "9059:23:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 796,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9059:23:0"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 801,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 797,
                                          "name": "path",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 757,
                                          "src": "9100:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 799,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 798,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "9105:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "9100:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 800,
                                        "name": "path1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 740,
                                        "src": "9110:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "9100:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 802,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9100:15:0"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 810,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 803,
                                          "name": "path",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 757,
                                          "src": "9133:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 805,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "32",
                                          "id": 804,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "9138:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "9133:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 808,
                                            "name": "tokenOut",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 736,
                                            "src": "9151:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IERC20_$3",
                                              "typeString": "contract IERC20"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_IERC20_$3",
                                              "typeString": "contract IERC20"
                                            }
                                          ],
                                          "id": 807,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "9143:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 806,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "9143:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 809,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9143:17:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "9133:27:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 811,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9133:27:0"
                                  }
                                ]
                              },
                              "id": 813,
                              "nodeType": "IfStatement",
                              "src": "8909:266:0",
                              "trueBody": {
                                "id": 788,
                                "nodeType": "Block",
                                "src": "8934:101:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 777,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 771,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 757,
                                        "src": "8952:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 775,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "8973:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            }
                                          ],
                                          "id": 774,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "NewExpression",
                                          "src": "8959:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                            "typeString": "function (uint256) pure returns (address[] memory)"
                                          },
                                          "typeName": {
                                            "baseType": {
                                              "id": 772,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "8963:7:0",
                                              "stateMutability": "nonpayable",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "id": 773,
                                            "length": null,
                                            "nodeType": "ArrayTypeName",
                                            "src": "8963:9:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                              "typeString": "address[]"
                                            }
                                          }
                                        },
                                        "id": 776,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8959:16:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "src": "8952:23:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 778,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8952:23:0"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 786,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 779,
                                          "name": "path",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 757,
                                          "src": "8993:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 781,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 780,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "8998:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "8993:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 784,
                                            "name": "tokenOut",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 736,
                                            "src": "9011:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IERC20_$3",
                                              "typeString": "contract IERC20"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_IERC20_$3",
                                              "typeString": "contract IERC20"
                                            }
                                          ],
                                          "id": 783,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "9003:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 782,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "9003:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 785,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9003:17:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "8993:27:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 787,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8993:27:0"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 853,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 846,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 757,
                              "src": "9347:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 848,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9352:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9347:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 851,
                                "name": "tokenIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 734,
                                "src": "9365:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$3",
                                  "typeString": "contract IERC20"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$3",
                                  "typeString": "contract IERC20"
                                }
                              ],
                              "id": 850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9357:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 849,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9357:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9357:16:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9347:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 854,
                        "nodeType": "ExpressionStatement",
                        "src": "9347:26:0"
                      },
                      {
                        "assignments": [
                          856
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 856,
                            "mutability": "mutable",
                            "name": "amountIn",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 942,
                            "src": "9383:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 855,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9383:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 862,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 858,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 736,
                              "src": "9417:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 859,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 757,
                              "src": "9427:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 860,
                              "name": "shareOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 748,
                              "src": "9433:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 857,
                            "name": "getInputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 732,
                            "src": "9402:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$3_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20,address[] memory,uint256) view returns (uint256)"
                            }
                          },
                          "id": 861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9402:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9383:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 866,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 864,
                                "name": "amountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 856,
                                "src": "9460:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 865,
                                "name": "amountMaxIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 738,
                                "src": "9472:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9460:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "696e73756666696369656e742d616d6f756e742d696e",
                              "id": 867,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9485:24:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2cf17f8ea224a017f237ad713b6fab210b8b6beee4b8549eff82dc5879947021",
                                "typeString": "literal_string \"insufficient-amount-in\""
                              },
                              "value": "insufficient-amount-in"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2cf17f8ea224a017f237ad713b6fab210b8b6beee4b8549eff82dc5879947021",
                                "typeString": "literal_string \"insufficient-amount-in\""
                              }
                            ],
                            "id": 863,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9452:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9452:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 869,
                        "nodeType": "ExpressionStatement",
                        "src": "9452:58:0"
                      },
                      {
                        "assignments": [
                          871
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 871,
                            "mutability": "mutable",
                            "name": "difference",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 942,
                            "src": "9520:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 870,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9520:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 881,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 876,
                                  "name": "tokenIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 734,
                                  "src": "9570:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$3",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 877,
                                  "name": "amountIn",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 856,
                                  "src": "9579:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 878,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9589:4:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$3",
                                    "typeString": "contract IERC20"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 874,
                                  "name": "bentoBox",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 667,
                                  "src": "9553:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                },
                                "id": 875,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toShare",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 628,
                                "src": "9553:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_contract$_IERC20_$3_$_t_uint256_$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (contract IERC20,uint256,bool) view external returns (uint256)"
                                }
                              },
                              "id": 879,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9553:41:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 872,
                              "name": "shareIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 746,
                              "src": "9541:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 99,
                            "src": "9541:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9541:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9520:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 885,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 734,
                              "src": "9623:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 888,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "9640:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_SushiSwapMultiExactSwapper_$1092",
                                    "typeString": "contract SushiSwapMultiExactSwapper"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_SushiSwapMultiExactSwapper_$1092",
                                    "typeString": "contract SushiSwapMultiExactSwapper"
                                  }
                                ],
                                "id": 887,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9632:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 886,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9632:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9632:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 892,
                                  "name": "factory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 665,
                                  "src": "9672:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 893,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 757,
                                    "src": "9681:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 895,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 894,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9686:1:0",
                                    "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": "9681:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 896,
                                    "name": "path",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 757,
                                    "src": "9690:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 898,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 897,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9695:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "9690:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 899,
                                  "name": "pairCodeHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 669,
                                  "src": "9699:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 890,
                                  "name": "UniswapV2Library",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 589,
                                  "src": "9647:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_UniswapV2Library_$589_$",
                                    "typeString": "type(library UniswapV2Library)"
                                  }
                                },
                                "id": 891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pairFor",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 243,
                                "src": "9647:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (address,address,address,bytes32) pure returns (address)"
                                }
                              },
                              "id": 900,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9647:65:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 901,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 856,
                              "src": "9714:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9724:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 882,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 667,
                              "src": "9605:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 884,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "withdraw",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 656,
                            "src": "9605:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$3_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IERC20,address,address,uint256,uint256) external returns (uint256,uint256)"
                            }
                          },
                          "id": 903,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9605:121:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "id": 904,
                        "nodeType": "ExpressionStatement",
                        "src": "9605:121:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 906,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 856,
                              "src": "9762:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 907,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 757,
                              "src": "9772:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 910,
                                  "name": "bentoBox",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 667,
                                  "src": "9786:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                ],
                                "id": 909,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9778:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 908,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9778:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 911,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9778:17:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 905,
                            "name": "_swapExactTokensForTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 973,
                            "src": "9736:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address[] memory,address)"
                            }
                          },
                          "id": 912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9736:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 913,
                        "nodeType": "ExpressionStatement",
                        "src": "9736:60:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 917,
                              "name": "tokenIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 734,
                              "src": "9824:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 920,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "9841:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_SushiSwapMultiExactSwapper_$1092",
                                    "typeString": "contract SushiSwapMultiExactSwapper"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_SushiSwapMultiExactSwapper_$1092",
                                    "typeString": "contract SushiSwapMultiExactSwapper"
                                  }
                                ],
                                "id": 919,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9833:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 918,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9833:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9833:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 922,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 744,
                              "src": "9848:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 923,
                              "name": "difference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 871,
                              "src": "9852:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 914,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 667,
                              "src": "9806:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 916,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 639,
                            "src": "9806:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$3_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20,address,address,uint256) external"
                            }
                          },
                          "id": 924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9806:57:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 925,
                        "nodeType": "ExpressionStatement",
                        "src": "9806:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 929,
                              "name": "tokenOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 736,
                              "src": "9890:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 932,
                                  "name": "bentoBox",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 667,
                                  "src": "9908:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                    "typeString": "contract IBentoBoxV1"
                                  }
                                ],
                                "id": 931,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9900:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 930,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9900:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9900:17:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 934,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 744,
                              "src": "9919:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9923:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 936,
                              "name": "shareOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 748,
                              "src": "9926:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$3",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 926,
                              "name": "bentoBox",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 667,
                              "src": "9873:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBentoBoxV1_$657",
                                "typeString": "contract IBentoBoxV1"
                              }
                            },
                            "id": 928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "deposit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 606,
                            "src": "9873:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_contract$_IERC20_$3_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IERC20,address,address,uint256,uint256) payable external returns (uint256,uint256)"
                            }
                          },
                          "id": 937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9873:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "id": 938,
                        "nodeType": "ExpressionStatement",
                        "src": "9873:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 939,
                              "name": "difference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 871,
                              "src": "9953:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 940,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "9952:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 752,
                        "id": 941,
                        "nodeType": "Return",
                        "src": "9945:19:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "3087d742",
                  "id": 943,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 749,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 734,
                        "mutability": "mutable",
                        "name": "tokenIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8610:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 733,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "8610:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 736,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8634:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 735,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3,
                          "src": "8634:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$3",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 738,
                        "mutability": "mutable",
                        "name": "amountMaxIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8659:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 737,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8659:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 740,
                        "mutability": "mutable",
                        "name": "path1",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8688:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 739,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8688:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 742,
                        "mutability": "mutable",
                        "name": "path2",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8711:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 741,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8711:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 744,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8734:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 743,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8734:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 746,
                        "mutability": "mutable",
                        "name": "shareIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8754:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 745,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8754:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 748,
                        "mutability": "mutable",
                        "name": "shareOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8779:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 747,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8779:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8600:201:0"
                  },
                  "returnParameters": {
                    "id": 752,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 751,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 943,
                        "src": "8820:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 750,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8820:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8819:9:0"
                  },
                  "scope": 1092,
                  "src": "8587:1384:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 972,
                    "nodeType": "Block",
                    "src": "10245:147:0",
                    "statements": [
                      {
                        "assignments": [
                          957
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 957,
                            "mutability": "mutable",
                            "name": "amounts",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 972,
                            "src": "10255:24:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 955,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "10255:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 956,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "10255:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 965,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 960,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 665,
                              "src": "10313:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 961,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 945,
                              "src": "10322:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 962,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 948,
                              "src": "10332:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 963,
                              "name": "pairCodeHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 669,
                              "src": "10338:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 958,
                              "name": "UniswapV2Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "10282:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_UniswapV2Library_$589_$",
                                "typeString": "type(library UniswapV2Library)"
                              }
                            },
                            "id": 959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAmountsOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 440,
                            "src": "10282:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_bytes32_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (address,uint256,address[] memory,bytes32) view returns (uint256[] memory)"
                            }
                          },
                          "id": 964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10282:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10255:96:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 967,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 957,
                              "src": "10367:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 968,
                              "name": "path",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 948,
                              "src": "10376:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 969,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 950,
                              "src": "10382:2:0",
                              "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_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 966,
                            "name": "_swap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1091,
                            "src": "10361:5:0",
                            "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": 970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10361:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 971,
                        "nodeType": "ExpressionStatement",
                        "src": "10361:24:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 973,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_swapExactTokensForTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 951,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 945,
                        "mutability": "mutable",
                        "name": "amountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 973,
                        "src": "10162:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 944,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10162:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 948,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 973,
                        "src": "10188:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 946,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10188:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 947,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "10188:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 950,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 973,
                        "src": "10219:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 949,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10219:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10152:83:0"
                  },
                  "returnParameters": {
                    "id": 952,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10245:0:0"
                  },
                  "scope": 1092,
                  "src": "10118:274:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1090,
                    "nodeType": "Block",
                    "src": "10601:650:0",
                    "statements": [
                      {
                        "body": {
                          "id": 1088,
                          "nodeType": "Block",
                          "src": "10653:592:0",
                          "statements": [
                            {
                              "assignments": [
                                997,
                                999
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 997,
                                  "mutability": "mutable",
                                  "name": "input",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10668:13:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 996,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10668:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 999,
                                  "mutability": "mutable",
                                  "name": "output",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10683:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 998,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10683:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1009,
                              "initialValue": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1000,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 979,
                                      "src": "10702:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 1002,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1001,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 985,
                                      "src": "10707:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10702:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1003,
                                      "name": "path",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 979,
                                      "src": "10711:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 1007,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1006,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1004,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 985,
                                        "src": "10716:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 1005,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10720:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10716:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10711:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "id": 1008,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10701:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                  "typeString": "tuple(address,address)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10667:56:0"
                            },
                            {
                              "assignments": [
                                1011,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1011,
                                  "mutability": "mutable",
                                  "name": "token0",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10738:14:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1010,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10738:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                null
                              ],
                              "id": 1017,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1014,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 997,
                                    "src": "10786:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1015,
                                    "name": "output",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 999,
                                    "src": "10793:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1012,
                                    "name": "UniswapV2Library",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 589,
                                    "src": "10758:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_UniswapV2Library_$589_$",
                                      "typeString": "type(library UniswapV2Library)"
                                    }
                                  },
                                  "id": 1013,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sortTokens",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 196,
                                  "src": "10758:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$",
                                    "typeString": "function (address,address) pure returns (address,address)"
                                  }
                                },
                                "id": 1016,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10758:42:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                  "typeString": "tuple(address,address)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10737:63:0"
                            },
                            {
                              "assignments": [
                                1019
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1019,
                                  "mutability": "mutable",
                                  "name": "amountOut",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10814:17:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1018,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10814:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1025,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1020,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 976,
                                  "src": "10834:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                },
                                "id": 1024,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1023,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1021,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 985,
                                    "src": "10842:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 1022,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10846:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "10842:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10834:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10814:34:0"
                            },
                            {
                              "assignments": [
                                1027,
                                1029
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1027,
                                  "mutability": "mutable",
                                  "name": "amount0Out",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10863:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1026,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10863:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 1029,
                                  "mutability": "mutable",
                                  "name": "amount1Out",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10883:18:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1028,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10883:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1046,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 1032,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1030,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 997,
                                    "src": "10905:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1031,
                                    "name": "token0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1011,
                                    "src": "10914:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "10905:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1039,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1019,
                                      "src": "10950:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "30",
                                          "id": 1042,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "10969:1:0",
                                          "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": 1041,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "10961:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 1040,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "10961:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 1043,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10961:10:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1044,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10949:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                    "typeString": "tuple(uint256,uint256)"
                                  }
                                },
                                "id": 1045,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "10905:67:0",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "30",
                                          "id": 1035,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "10932:1:0",
                                          "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": 1034,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "10924:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint256_$",
                                          "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                          "id": 1033,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "10924:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 1036,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10924:10:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1037,
                                      "name": "amountOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1019,
                                      "src": "10936:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1038,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10923:23:0",
                                  "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": "10862:110:0"
                            },
                            {
                              "assignments": [
                                1048
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1048,
                                  "mutability": "mutable",
                                  "name": "to",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1088,
                                  "src": "10986:10:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1047,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10986:7:0",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1068,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1054,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1049,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 985,
                                    "src": "10999:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1053,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1050,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 979,
                                        "src": "11003:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 1051,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "11003:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "32",
                                      "id": 1052,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11017:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "11003:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10999:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 1066,
                                  "name": "_to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 981,
                                  "src": "11092:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "10999:96:0",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1057,
                                      "name": "factory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 665,
                                      "src": "11046:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1058,
                                      "name": "output",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 999,
                                      "src": "11055:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1059,
                                        "name": "path",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 979,
                                        "src": "11063:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                          "typeString": "address[] memory"
                                        }
                                      },
                                      "id": 1063,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1062,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 1060,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 985,
                                          "src": "11068:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "32",
                                          "id": 1061,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "11072:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "src": "11068:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "11063:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 1064,
                                      "name": "pairCodeHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 669,
                                      "src": "11076:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1055,
                                      "name": "UniswapV2Library",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 589,
                                      "src": "11021:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_UniswapV2Library_$589_$",
                                        "typeString": "type(library UniswapV2Library)"
                                      }
                                    },
                                    "id": 1056,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "pairFor",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 243,
                                    "src": "11021:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bytes32_$returns$_t_address_$",
                                      "typeString": "function (address,address,address,bytes32) pure returns (address)"
                                    }
                                  },
                                  "id": 1065,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11021:68:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10986:109:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1079,
                                    "name": "amount0Out",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1027,
                                    "src": "11193:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1080,
                                    "name": "amount1Out",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1029,
                                    "src": "11205:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1081,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1048,
                                    "src": "11217:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1084,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "11231:1:0",
                                        "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": 1083,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "NewExpression",
                                      "src": "11221:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function (uint256) pure returns (bytes memory)"
                                      },
                                      "typeName": {
                                        "id": 1082,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11225:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_storage_ptr",
                                          "typeString": "bytes"
                                        }
                                      }
                                    },
                                    "id": 1085,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11221:12:0",
                                    "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": 1072,
                                            "name": "factory",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 665,
                                            "src": "11149:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 1073,
                                            "name": "input",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 997,
                                            "src": "11158:5:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 1074,
                                            "name": "output",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 999,
                                            "src": "11165:6:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 1075,
                                            "name": "pairCodeHash",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 669,
                                            "src": "11173:12:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1070,
                                            "name": "UniswapV2Library",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 589,
                                            "src": "11124:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_UniswapV2Library_$589_$",
                                              "typeString": "type(library UniswapV2Library)"
                                            }
                                          },
                                          "id": 1071,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "pairFor",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 243,
                                          "src": "11124:24:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$_t_bytes32_$returns$_t_address_$",
                                            "typeString": "function (address,address,address,bytes32) pure returns (address)"
                                          }
                                        },
                                        "id": 1076,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11124:62:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1069,
                                      "name": "IUniswapV2Pair",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 149,
                                      "src": "11109:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IUniswapV2Pair_$149_$",
                                        "typeString": "type(contract IUniswapV2Pair)"
                                      }
                                    },
                                    "id": 1077,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11109:78:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IUniswapV2Pair_$149",
                                      "typeString": "contract IUniswapV2Pair"
                                    }
                                  },
                                  "id": 1078,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swap",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 148,
                                  "src": "11109:83:0",
                                  "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": 1086,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11109:125:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1087,
                              "nodeType": "ExpressionStatement",
                              "src": "11109:125:0"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 987,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 985,
                            "src": "10627:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 988,
                                "name": "path",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 979,
                                "src": "10631:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10631:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10645:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "10631:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10627:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1089,
                        "initializationExpression": {
                          "assignments": [
                            985
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 985,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 1089,
                              "src": "10616:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 984,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "10616:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 986,
                          "initialValue": null,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "10616:9:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "10648:3:0",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 993,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 985,
                              "src": "10648:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 995,
                          "nodeType": "ExpressionStatement",
                          "src": "10648:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "10611:634:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 1091,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_swap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 982,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 976,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1091,
                        "src": "10501:24:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 974,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "10501:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 975,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "10501:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 979,
                        "mutability": "mutable",
                        "name": "path",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1091,
                        "src": "10535:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 977,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10535:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 978,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "10535:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 981,
                        "mutability": "mutable",
                        "name": "_to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1091,
                        "src": "10566:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 980,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10566:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10491:92:0"
                  },
                  "returnParameters": {
                    "id": 983,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10601:0:0"
                  },
                  "scope": 1092,
                  "src": "10477:774:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1093,
              "src": "7752:3501:0"
            }
          ],
          "src": "94:11159:0"
        },
        "id": 0
      }
    }
  }
}
