{
  "contractName": "SqrtPriceMath",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"Functions based on Q64.96 sqrt price and liquidity\"},\"userdoc\":{\"methods\":{},\"notice\":\"Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas\"}},\"settings\":{\"compilationTarget\":{\"project:/contracts/interfaces/uniswap/SqrtPriceMath.sol\":\"SqrtPriceMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"project:/contracts/interfaces/uniswap/FixedPoint96.sol\":{\"keccak256\":\"0x0ba8a9b95a956a4050749c0158e928398c447c91469682ca8a7cc7e77a7fe032\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://186d3b528866065a5856f96d2aeec698efa99f8da913e9adf34f8cc296cc993d\",\"dweb:/ipfs/QmUAiMvtAQp8c9dy57bqJYzG7hkb1uChiPaQmt264skoqP\"]},\"project:/contracts/interfaces/uniswap/FullMath.sol\":{\"keccak256\":\"0x50e87f7a3197525d1c6f7e04290060e848677c8a4e86c554bc6ace4a4d0d476d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3874093a6b37d8e68f9475a91f8eb0a1c808cb6153c84cfe6c37909505a4d24e\",\"dweb:/ipfs/QmUqGpQqvSHX4SwUvcBCs9g4ZhR9JPhgD3615oUigAhtjj\"]},\"project:/contracts/interfaces/uniswap/LowGasSafeMath.sol\":{\"keccak256\":\"0xc96ba4e985950ecffd96feda6385286d9a4b1ebb2279e420c9bb1b79b765306c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d5ead6a53282214cce910e511f7dca4d14c8933de6375cd9fa3653cc94934e2b\",\"dweb:/ipfs/QmcnPR5qhzEYjX7YLdjUeWD7wpLMVn4HonhpNroEh9itpC\"]},\"project:/contracts/interfaces/uniswap/SafeCast.sol\":{\"keccak256\":\"0x4c12bf820c0b011f5490a209960ca34dd8af34660ef9e01de0438393d15e3fd8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://fed11489e218e55d087d42b4f350a30e10cd2aedec8f432bd3cc712f648d5869\",\"dweb:/ipfs/QmWfRnRxyXwHUDcTQPazxYYk5jxErGeQqdvnYtyg5nBPbU\"]},\"project:/contracts/interfaces/uniswap/SqrtPriceMath.sol\":{\"keccak256\":\"0x4f69701d331d364b69a1cda77cd7b983a0079d36ae0e06b0bb1d64ae56c3705e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f9ed4f172da650484c97d31cce084e905e69c3f3b072141cb15363f4ed0cd03c\",\"dweb:/ipfs/QmPNDM667PxzbbR8YDbtibFaPMGrcbK71GKpFPkGgDEYvb\"]},\"project:/contracts/interfaces/uniswap/UnsafeMath.sol\":{\"keccak256\":\"0x5f36d7d16348d8c37fe64fda932018d6e5e8acecd054f0f97d32db62d20c6c88\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4bd4e817ea3d2c26bb2be7e58db3eaa403119562c18d4c09cc92fb31aa231496\",\"dweb:/ipfs/QmbpjgL8Hf1mhmUyf9hpuPk4noGAggCdTqaRBFKqNF3AQw\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122043490ba7d75ea493722053561329409be3e7e08ef1edfb7e6ea38c6f8b435a6464736f6c63430006080033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122043490ba7d75ea493722053561329409be3e7e08ef1edfb7e6ea38c6f8b435a6464736f6c63430006080033",
  "immutableReferences": {},
  "sourceMap": "369:10404:39:-:0;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "369:10404:39:-:0;;;;;;12:1:-1;9;2:12",
  "source": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity >=0.5.0;\n\nimport './LowGasSafeMath.sol';\nimport './SafeCast.sol';\n\nimport './FullMath.sol';\nimport './UnsafeMath.sol';\nimport './FixedPoint96.sol';\n\n/// @title Functions based on Q64.96 sqrt price and liquidity\n/// @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas\nlibrary SqrtPriceMath {\n    using LowGasSafeMath for uint256;\n    using SafeCast for uint256;\n\n    /// @notice Gets the next sqrt price given a delta of token0\n    /// @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least\n    /// far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the\n    /// price less in order to not send too much output.\n    /// The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96),\n    /// if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount).\n    /// @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta\n    /// @param liquidity The amount of usable liquidity\n    /// @param amount How much of token0 to add or remove from virtual reserves\n    /// @param add Whether to add or remove the amount of token0\n    /// @return The price after adding or removing amount, depending on add\n    function getNextSqrtPriceFromAmount0RoundingUp(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amount,\n        bool add\n    ) internal pure returns (uint160) {\n        // we short circuit amount == 0 because the result is otherwise not guaranteed to equal the input price\n        if (amount == 0) return sqrtPX96;\n        uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION;\n\n        if (add) {\n            uint256 product;\n            if ((product = amount * sqrtPX96) / amount == sqrtPX96) {\n                uint256 denominator = numerator1 + product;\n                if (denominator >= numerator1)\n                    // always fits in 160 bits\n                    return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator));\n            }\n\n            return uint160(UnsafeMath.divRoundingUp(numerator1, (numerator1 / sqrtPX96).add(amount)));\n        } else {\n            uint256 product;\n            // if the product overflows, we know the denominator underflows\n            // in addition, we must check that the denominator does not underflow\n            require((product = amount * sqrtPX96) / amount == sqrtPX96 && numerator1 > product);\n            uint256 denominator = numerator1 - product;\n            return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator).toUint160();\n        }\n    }\n\n    /// @notice Gets the next sqrt price given a delta of token1\n    /// @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least\n    /// far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the\n    /// price less in order to not send too much output.\n    /// The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity\n    /// @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta\n    /// @param liquidity The amount of usable liquidity\n    /// @param amount How much of token1 to add, or remove, from virtual reserves\n    /// @param add Whether to add, or remove, the amount of token1\n    /// @return The price after adding or removing `amount`\n    function getNextSqrtPriceFromAmount1RoundingDown(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amount,\n        bool add\n    ) internal pure returns (uint160) {\n        // if we're adding (subtracting), rounding down requires rounding the quotient down (up)\n        // in both cases, avoid a mulDiv for most inputs\n        if (add) {\n            uint256 quotient =\n                (\n                    amount <= type(uint160).max\n                        ? (amount << FixedPoint96.RESOLUTION) / liquidity\n                        : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity)\n                );\n\n            return uint256(sqrtPX96).add(quotient).toUint160();\n        } else {\n            uint256 quotient =\n                (\n                    amount <= type(uint160).max\n                        ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity)\n                        : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity)\n                );\n\n            require(sqrtPX96 > quotient);\n            // always fits 160 bits\n            return uint160(sqrtPX96 - quotient);\n        }\n    }\n\n    /// @notice Gets the next sqrt price given an input amount of token0 or token1\n    /// @dev Throws if price or liquidity are 0, or if the next price is out of bounds\n    /// @param sqrtPX96 The starting price, i.e., before accounting for the input amount\n    /// @param liquidity The amount of usable liquidity\n    /// @param amountIn How much of token0, or token1, is being swapped in\n    /// @param zeroForOne Whether the amount in is token0 or token1\n    /// @return sqrtQX96 The price after adding the input amount to token0 or token1\n    function getNextSqrtPriceFromInput(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amountIn,\n        bool zeroForOne\n    ) internal pure returns (uint160 sqrtQX96) {\n        require(sqrtPX96 > 0);\n        require(liquidity > 0);\n\n        // round to make sure that we don't pass the target price\n        return\n            zeroForOne\n                ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true)\n                : getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true);\n    }\n\n    /// @notice Gets the next sqrt price given an output amount of token0 or token1\n    /// @dev Throws if price or liquidity are 0 or the next price is out of bounds\n    /// @param sqrtPX96 The starting price before accounting for the output amount\n    /// @param liquidity The amount of usable liquidity\n    /// @param amountOut How much of token0, or token1, is being swapped out\n    /// @param zeroForOne Whether the amount out is token0 or token1\n    /// @return sqrtQX96 The price after removing the output amount of token0 or token1\n    function getNextSqrtPriceFromOutput(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amountOut,\n        bool zeroForOne\n    ) internal pure returns (uint160 sqrtQX96) {\n        require(sqrtPX96 > 0);\n        require(liquidity > 0);\n\n        // round to make sure that we pass the target price\n        return\n            zeroForOne\n                ? getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false)\n                : getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false);\n    }\n\n    /// @notice Gets the amount0 delta between two prices\n    /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper),\n    /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The amount of usable liquidity\n    /// @param roundUp Whether to round the amount up or down\n    /// @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices\n    function getAmount0Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        uint128 liquidity,\n        bool roundUp\n    ) internal pure returns (uint256 amount0) {\n        if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n        uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION;\n        uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96;\n\n        require(sqrtRatioAX96 > 0);\n\n        return\n            roundUp\n                ? UnsafeMath.divRoundingUp(\n                    FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96),\n                    sqrtRatioAX96\n                )\n                : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96;\n    }\n\n    /// @notice Gets the amount1 delta between two prices\n    /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower))\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The amount of usable liquidity\n    /// @param roundUp Whether to round the amount up, or down\n    /// @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices\n    function getAmount1Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        uint128 liquidity,\n        bool roundUp\n    ) internal pure returns (uint256 amount1) {\n        if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n        return\n            roundUp\n                ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96)\n                : FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\n    }\n\n    /// @notice Helper that gets signed token0 delta\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The change in liquidity for which to compute the amount0 delta\n    /// @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices\n    function getAmount0Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        int128 liquidity\n    ) internal pure returns (int256 amount0) {\n        return\n            liquidity < 0\n                ? -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256()\n                : getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256();\n    }\n\n    /// @notice Helper that gets signed token1 delta\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The change in liquidity for which to compute the amount1 delta\n    /// @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices\n    function getAmount1Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        int128 liquidity\n    ) internal pure returns (int256 amount1) {\n        return\n            liquidity < 0\n                ? -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256()\n                : getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256();\n    }\n}\n",
  "sourcePath": "/home/thezviad_gmail_com/src/swappa/contracts/interfaces/uniswap/SqrtPriceMath.sol",
  "ast": {
    "absolutePath": "project:/contracts/interfaces/uniswap/SqrtPriceMath.sol",
    "exportedSymbols": {
      "SqrtPriceMath": [
        3847
      ]
    },
    "id": 3848,
    "license": "BUSL-1.1",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3333,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "37:24:39"
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/LowGasSafeMath.sol",
        "file": "./LowGasSafeMath.sol",
        "id": 3334,
        "nodeType": "ImportDirective",
        "scope": 3848,
        "sourceUnit": 3262,
        "src": "63:30:39",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/SafeCast.sol",
        "file": "./SafeCast.sol",
        "id": 3335,
        "nodeType": "ImportDirective",
        "scope": 3848,
        "sourceUnit": 3332,
        "src": "94:24:39",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/FullMath.sol",
        "file": "./FullMath.sol",
        "id": 3336,
        "nodeType": "ImportDirective",
        "scope": 3848,
        "sourceUnit": 2346,
        "src": "120:24:39",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/UnsafeMath.sol",
        "file": "./UnsafeMath.sol",
        "id": 3337,
        "nodeType": "ImportDirective",
        "scope": 3848,
        "sourceUnit": 5299,
        "src": "145:26:39",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/uniswap/FixedPoint96.sol",
        "file": "./FixedPoint96.sol",
        "id": 3338,
        "nodeType": "ImportDirective",
        "scope": 3848,
        "sourceUnit": 2173,
        "src": "172:28:39",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 3339,
          "nodeType": "StructuredDocumentation",
          "src": "202:167:39",
          "text": "@title Functions based on Q64.96 sqrt price and liquidity\n @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas"
        },
        "fullyImplemented": true,
        "id": 3847,
        "linearizedBaseContracts": [
          3847
        ],
        "name": "SqrtPriceMath",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3342,
            "libraryName": {
              "contractScope": null,
              "id": 3340,
              "name": "LowGasSafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3261,
              "src": "403:14:39",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LowGasSafeMath_$3261",
                "typeString": "library LowGasSafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "397:33:39",
            "typeName": {
              "id": 3341,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "422:7:39",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3345,
            "libraryName": {
              "contractScope": null,
              "id": 3343,
              "name": "SafeCast",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3331,
              "src": "441:8:39",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeCast_$3331",
                "typeString": "library SafeCast"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "435:27:39",
            "typeName": {
              "id": 3344,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "454:7:39",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 3464,
              "nodeType": "Block",
              "src": "1585:1186:39",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3359,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3352,
                      "src": "1711:6:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1721:1:39",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1711:11:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3364,
                  "nodeType": "IfStatement",
                  "src": "1707:32:39",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 3362,
                      "name": "sqrtPX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3348,
                      "src": "1731:8:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "functionReturnParameters": 3358,
                    "id": 3363,
                    "nodeType": "Return",
                    "src": "1724:15:39"
                  }
                },
                {
                  "assignments": [
                    3366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3366,
                      "mutability": "mutable",
                      "name": "numerator1",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3464,
                      "src": "1749:18:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3365,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1749:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3374,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3369,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3350,
                          "src": "1778:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        ],
                        "id": 3368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1770:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 3367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1770:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 3370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1770:18:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3371,
                        "name": "FixedPoint96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2172,
                        "src": "1792:12:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                          "typeString": "type(library FixedPoint96)"
                        }
                      },
                      "id": 3372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "RESOLUTION",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2168,
                      "src": "1792:23:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "1770:45:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1749:66:39"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 3375,
                    "name": "add",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3354,
                    "src": "1830:3:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 3462,
                    "nodeType": "Block",
                    "src": "2321:444:39",
                    "statements": [
                      {
                        "assignments": [
                          3428
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3428,
                            "mutability": "mutable",
                            "name": "product",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3462,
                            "src": "2335:15:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3427,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2335:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3429,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2335:15:39"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3438,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3435,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 3431,
                                          "name": "product",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3428,
                                          "src": "2531:7:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 3434,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 3432,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3352,
                                            "src": "2541:6:39",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 3433,
                                            "name": "sqrtPX96",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3348,
                                            "src": "2550:8:39",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          },
                                          "src": "2541:17:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "2531:27:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 3436,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2530:29:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 3437,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3352,
                                    "src": "2562:6:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2530:38:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3439,
                                  "name": "sqrtPX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3348,
                                  "src": "2572:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "2530:50:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3443,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3441,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3366,
                                  "src": "2584:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3442,
                                  "name": "product",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3428,
                                  "src": "2597:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2584:20:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2530:74:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3430,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2522:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 3445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2522:83:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3446,
                        "nodeType": "ExpressionStatement",
                        "src": "2522:83:39"
                      },
                      {
                        "assignments": [
                          3448
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3448,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3462,
                            "src": "2619:19:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3447,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2619:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3452,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3449,
                            "name": "numerator1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "2641:10:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3450,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3428,
                            "src": "2654:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2641:20:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2619:42:39"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3455,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3366,
                                  "src": "2708:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3456,
                                  "name": "sqrtPX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3348,
                                  "src": "2720:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3457,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3448,
                                  "src": "2730:11:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3453,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2345,
                                  "src": "2682:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 3454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDivRoundingUp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2344,
                                "src": "2682:25:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 3458,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2682:60:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toUint160",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3285,
                            "src": "2682:70:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint160_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint160)"
                            }
                          },
                          "id": 3460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2682:72:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 3358,
                        "id": 3461,
                        "nodeType": "Return",
                        "src": "2675:79:39"
                      }
                    ]
                  },
                  "id": 3463,
                  "nodeType": "IfStatement",
                  "src": "1826:939:39",
                  "trueBody": {
                    "id": 3426,
                    "nodeType": "Block",
                    "src": "1835:480:39",
                    "statements": [
                      {
                        "assignments": [
                          3377
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3377,
                            "mutability": "mutable",
                            "name": "product",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3426,
                            "src": "1849:15:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3376,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1849:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3378,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1849:15:39"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 3383,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 3379,
                                    "name": "product",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3377,
                                    "src": "1883:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3382,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3380,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3352,
                                      "src": "1893:6:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3381,
                                      "name": "sqrtPX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3348,
                                      "src": "1902:8:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "src": "1893:17:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1883:27:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 3384,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1882:29:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 3385,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3352,
                              "src": "1914:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1882:38:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3387,
                            "name": "sqrtPX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3348,
                            "src": "1924:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1882:50:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3410,
                        "nodeType": "IfStatement",
                        "src": "1878:323:39",
                        "trueBody": {
                          "id": 3409,
                          "nodeType": "Block",
                          "src": "1934:267:39",
                          "statements": [
                            {
                              "assignments": [
                                3390
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3390,
                                  "mutability": "mutable",
                                  "name": "denominator",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 3409,
                                  "src": "1952:19:39",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3389,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1952:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3394,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3393,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3391,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3366,
                                  "src": "1974:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3392,
                                  "name": "product",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3377,
                                  "src": "1987:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1974:20:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1952:42:39"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3395,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3390,
                                  "src": "2016:11:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3396,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3366,
                                  "src": "2031:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2016:25:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 3408,
                              "nodeType": "IfStatement",
                              "src": "2012:174:39",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3402,
                                          "name": "numerator1",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3366,
                                          "src": "2151:10:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 3403,
                                          "name": "sqrtPX96",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3348,
                                          "src": "2163:8:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 3404,
                                          "name": "denominator",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3390,
                                          "src": "2173:11:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 3400,
                                          "name": "FullMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2345,
                                          "src": "2125:8:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                                            "typeString": "type(library FullMath)"
                                          }
                                        },
                                        "id": 3401,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mulDivRoundingUp",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2344,
                                        "src": "2125:25:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 3405,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2125:60:39",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 3399,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2117:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 3398,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2117:7:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 3406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2117:69:39",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "functionReturnParameters": 3358,
                                "id": 3407,
                                "nodeType": "Return",
                                "src": "2110:76:39"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3415,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3366,
                                  "src": "2255:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3421,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3352,
                                      "src": "2295:6:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 3418,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 3416,
                                            "name": "numerator1",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3366,
                                            "src": "2268:10:39",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "/",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 3417,
                                            "name": "sqrtPX96",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3348,
                                            "src": "2281:8:39",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          },
                                          "src": "2268:21:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 3419,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "2267:23:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 3420,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3156,
                                    "src": "2267:27:39",
                                    "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": 3422,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2267:35:39",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3413,
                                  "name": "UnsafeMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5298,
                                  "src": "2230:10:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_UnsafeMath_$5298_$",
                                    "typeString": "type(library UnsafeMath)"
                                  }
                                },
                                "id": 3414,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "divRoundingUp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5297,
                                "src": "2230:24:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 3423,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2230:73:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3412,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2222:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 3411,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "2222:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2222:82:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 3358,
                        "id": 3425,
                        "nodeType": "Return",
                        "src": "2215:89:39"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 3346,
              "nodeType": "StructuredDocumentation",
              "src": "468:932:39",
              "text": "@notice Gets the next sqrt price given a delta of token0\n @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the\n price less in order to not send too much output.\n The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96),\n if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount).\n @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token0 to add or remove from virtual reserves\n @param add Whether to add or remove the amount of token0\n @return The price after adding or removing amount, depending on add"
            },
            "id": 3465,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromAmount0RoundingUp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3348,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3465,
                  "src": "1461:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3347,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "1461:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3350,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3465,
                  "src": "1487:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 3349,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "1487:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3352,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3465,
                  "src": "1514:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3351,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1514:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3354,
                  "mutability": "mutable",
                  "name": "add",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3465,
                  "src": "1538:8:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3353,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1538:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1451:101:39"
            },
            "returnParameters": {
              "id": 3358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3357,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3465,
                  "src": "1576:7:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3356,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "1576:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1575:9:39"
            },
            "scope": 3847,
            "src": "1405:1366:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3559,
              "nodeType": "Block",
              "src": "3779:971:39",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 3479,
                    "name": "add",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3474,
                    "src": "3947:3:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 3557,
                    "nodeType": "Block",
                    "src": "4303:441:39",
                    "statements": [
                      {
                        "assignments": [
                          3518
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3518,
                            "mutability": "mutable",
                            "name": "quotient",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3557,
                            "src": "4317:16:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3517,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4317:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3543,
                        "initialValue": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3519,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3472,
                                  "src": "4374:6:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3522,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "4389:7:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 3521,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "4389:7:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        }
                                      ],
                                      "id": 3520,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "4384:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 3523,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4384:13:39",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint160",
                                      "typeString": "type(uint160)"
                                    }
                                  },
                                  "id": 3524,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4384:17:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4374:27:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3536,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3472,
                                    "src": "4551:6:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3537,
                                      "name": "FixedPoint96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2172,
                                      "src": "4559:12:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                                        "typeString": "type(library FixedPoint96)"
                                      }
                                    },
                                    "id": 3538,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Q96",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2171,
                                    "src": "4559:16:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3539,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3470,
                                    "src": "4577:9:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3534,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2345,
                                    "src": "4525:8:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 3535,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDivRoundingUp",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2344,
                                  "src": "4525:25:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 3540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4525:62:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "4374:213:39",
                              "trueExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3531,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3528,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3472,
                                      "src": "4453:6:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 3529,
                                        "name": "FixedPoint96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2172,
                                        "src": "4463:12:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                                          "typeString": "type(library FixedPoint96)"
                                        }
                                      },
                                      "id": 3530,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "RESOLUTION",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2168,
                                      "src": "4463:23:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "4453:33:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3532,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3470,
                                    "src": "4488:9:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3526,
                                    "name": "UnsafeMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5298,
                                    "src": "4428:10:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_UnsafeMath_$5298_$",
                                      "typeString": "type(library UnsafeMath)"
                                    }
                                  },
                                  "id": 3527,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "divRoundingUp",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5297,
                                  "src": "4428:24:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 3533,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4428:70:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3542,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4352:253:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4317:288:39"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 3545,
                                "name": "sqrtPX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3468,
                                "src": "4628:8:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3546,
                                "name": "quotient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3518,
                                "src": "4639:8:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4628:19:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3544,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4620:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 3548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4620:28:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3549,
                        "nodeType": "ExpressionStatement",
                        "src": "4620:28:39"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3554,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 3552,
                                "name": "sqrtPX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3468,
                                "src": "4713:8:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3553,
                                "name": "quotient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3518,
                                "src": "4724:8:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4713:19:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3551,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4705:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 3550,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "4705:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4705:28:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 3478,
                        "id": 3556,
                        "nodeType": "Return",
                        "src": "4698:35:39"
                      }
                    ]
                  },
                  "id": 3558,
                  "nodeType": "IfStatement",
                  "src": "3943:801:39",
                  "trueBody": {
                    "id": 3516,
                    "nodeType": "Block",
                    "src": "3952:345:39",
                    "statements": [
                      {
                        "assignments": [
                          3481
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3481,
                            "mutability": "mutable",
                            "name": "quotient",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3516,
                            "src": "3966:16:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3480,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3966:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3505,
                        "initialValue": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3488,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3482,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3472,
                                  "src": "4023:6:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3485,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "4038:7:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 3484,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "4038:7:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        }
                                      ],
                                      "id": 3483,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "4033:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 3486,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4033:13:39",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint160",
                                      "typeString": "type(uint160)"
                                    }
                                  },
                                  "id": 3487,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4033:17:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4023:27:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3498,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3472,
                                    "src": "4167:6:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3499,
                                      "name": "FixedPoint96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2172,
                                      "src": "4175:12:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                                        "typeString": "type(library FixedPoint96)"
                                      }
                                    },
                                    "id": 3500,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Q96",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2171,
                                    "src": "4175:16:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3501,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3470,
                                    "src": "4193:9:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3496,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2345,
                                    "src": "4151:8:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 3497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2301,
                                  "src": "4151:15:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 3502,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4151:52:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "4023:180:39",
                              "trueExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 3492,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 3489,
                                        "name": "amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3472,
                                        "src": "4078:6:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 3490,
                                          "name": "FixedPoint96",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2172,
                                          "src": "4088:12:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                                            "typeString": "type(library FixedPoint96)"
                                          }
                                        },
                                        "id": 3491,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "RESOLUTION",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2168,
                                        "src": "4088:23:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "src": "4078:33:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 3493,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4077:35:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3494,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3470,
                                  "src": "4115:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "4077:47:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3504,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4001:220:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3966:255:39"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3511,
                                  "name": "quotient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3481,
                                  "src": "4265:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3508,
                                      "name": "sqrtPX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3468,
                                      "src": "4251:8:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 3507,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4243:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 3506,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4243:7:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 3509,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4243:17:39",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 3510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3156,
                                "src": "4243:21:39",
                                "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": 3512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4243:31:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toUint160",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3285,
                            "src": "4243:41:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint160_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint160)"
                            }
                          },
                          "id": 3514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4243:43:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 3478,
                        "id": 3515,
                        "nodeType": "Return",
                        "src": "4236:50:39"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 3466,
              "nodeType": "StructuredDocumentation",
              "src": "2777:815:39",
              "text": "@notice Gets the next sqrt price given a delta of token1\n @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the\n price less in order to not send too much output.\n The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity\n @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token1 to add, or remove, from virtual reserves\n @param add Whether to add, or remove, the amount of token1\n @return The price after adding or removing `amount`"
            },
            "id": 3560,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromAmount1RoundingDown",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3468,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3560,
                  "src": "3655:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3467,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "3655:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3470,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3560,
                  "src": "3681:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 3469,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3681:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3472,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3560,
                  "src": "3708:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3708:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3474,
                  "mutability": "mutable",
                  "name": "add",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3560,
                  "src": "3732:8:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3473,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3732:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3645:101:39"
            },
            "returnParameters": {
              "id": 3478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3477,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3560,
                  "src": "3770:7:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3476,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "3770:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3769:9:39"
            },
            "scope": 3847,
            "src": "3597:1153:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3601,
              "nodeType": "Block",
              "src": "5485:364:39",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 3577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3575,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3563,
                          "src": "5503:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5514:1:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5503:12:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3574,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5495:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5495:21:39",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3579,
                  "nodeType": "ExpressionStatement",
                  "src": "5495:21:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 3583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3581,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3565,
                          "src": "5534:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5546:1:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5534:13:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3580,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5526:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5526:22:39",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3585,
                  "nodeType": "ExpressionStatement",
                  "src": "5526:22:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 3586,
                      "name": "zeroForOne",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3569,
                      "src": "5644:10:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3594,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3563,
                          "src": "5806:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3595,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3565,
                          "src": "5816:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3596,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3567,
                          "src": "5827:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 3597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5837:4:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 3593,
                        "name": "getNextSqrtPriceFromAmount1RoundingDown",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3560,
                        "src": "5766:39:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 3598,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5766:76:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 3599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5644:198:39",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3588,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3563,
                          "src": "5711:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3589,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3565,
                          "src": "5721:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3590,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3567,
                          "src": "5732:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 3591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5742:4:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 3587,
                        "name": "getNextSqrtPriceFromAmount0RoundingUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3465,
                        "src": "5673:37:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 3592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5673:74:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "functionReturnParameters": 3573,
                  "id": 3600,
                  "nodeType": "Return",
                  "src": "5625:217:39"
                }
              ]
            },
            "documentation": {
              "id": 3561,
              "nodeType": "StructuredDocumentation",
              "src": "4756:538:39",
              "text": "@notice Gets the next sqrt price given an input amount of token0 or token1\n @dev Throws if price or liquidity are 0, or if the next price is out of bounds\n @param sqrtPX96 The starting price, i.e., before accounting for the input amount\n @param liquidity The amount of usable liquidity\n @param amountIn How much of token0, or token1, is being swapped in\n @param zeroForOne Whether the amount in is token0 or token1\n @return sqrtQX96 The price after adding the input amount to token0 or token1"
            },
            "id": 3602,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromInput",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3563,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3602,
                  "src": "5343:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3562,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "5343:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3565,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3602,
                  "src": "5369:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 3564,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5369:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3567,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3602,
                  "src": "5396:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3566,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5396:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3569,
                  "mutability": "mutable",
                  "name": "zeroForOne",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3602,
                  "src": "5422:15:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3568,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5422:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5333:110:39"
            },
            "returnParameters": {
              "id": 3573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3572,
                  "mutability": "mutable",
                  "name": "sqrtQX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3602,
                  "src": "5467:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3571,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "5467:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5466:18:39"
            },
            "scope": 3847,
            "src": "5299:550:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3643,
              "nodeType": "Block",
              "src": "6583:362:39",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 3619,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3617,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3605,
                          "src": "6601:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6612:1:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6601:12:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3616,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6593:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6593:21:39",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3621,
                  "nodeType": "ExpressionStatement",
                  "src": "6593:21:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 3625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3623,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3607,
                          "src": "6632:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6644:1:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6632:13:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3622,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6624:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6624:22:39",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3627,
                  "nodeType": "ExpressionStatement",
                  "src": "6624:22:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 3628,
                      "name": "zeroForOne",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3611,
                      "src": "6736:10:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3636,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3605,
                          "src": "6900:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3637,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3607,
                          "src": "6910:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3638,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3609,
                          "src": "6921:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 3639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6932:5:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 3635,
                        "name": "getNextSqrtPriceFromAmount0RoundingUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3465,
                        "src": "6862:37:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 3640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6862:76:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 3641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6736:202:39",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3630,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3605,
                          "src": "6805:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3631,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3607,
                          "src": "6815:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3632,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3609,
                          "src": "6826:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 3633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6837:5:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 3629,
                        "name": "getNextSqrtPriceFromAmount1RoundingDown",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3560,
                        "src": "6765:39:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 3634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6765:78:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "functionReturnParameters": 3615,
                  "id": 3642,
                  "nodeType": "Return",
                  "src": "6717:221:39"
                }
              ]
            },
            "documentation": {
              "id": 3603,
              "nodeType": "StructuredDocumentation",
              "src": "5855:535:39",
              "text": "@notice Gets the next sqrt price given an output amount of token0 or token1\n @dev Throws if price or liquidity are 0 or the next price is out of bounds\n @param sqrtPX96 The starting price before accounting for the output amount\n @param liquidity The amount of usable liquidity\n @param amountOut How much of token0, or token1, is being swapped out\n @param zeroForOne Whether the amount out is token0 or token1\n @return sqrtQX96 The price after removing the output amount of token0 or token1"
            },
            "id": 3644,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromOutput",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3605,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3644,
                  "src": "6440:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3604,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "6440:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3607,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3644,
                  "src": "6466:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 3606,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "6466:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3609,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3644,
                  "src": "6493:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3608,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6493:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3611,
                  "mutability": "mutable",
                  "name": "zeroForOne",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3644,
                  "src": "6520:15:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3610,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6520:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6430:111:39"
            },
            "returnParameters": {
              "id": 3615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3614,
                  "mutability": "mutable",
                  "name": "sqrtQX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3644,
                  "src": "6565:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3613,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "6565:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6564:18:39"
            },
            "scope": 3847,
            "src": "6395:550:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3713,
              "nodeType": "Block",
              "src": "7675:597:39",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 3660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3658,
                      "name": "sqrtRatioAX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3647,
                      "src": "7689:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3659,
                      "name": "sqrtRatioBX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3649,
                      "src": "7705:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "7689:29:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3669,
                  "nodeType": "IfStatement",
                  "src": "7685:98:39",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 3667,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 3661,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3647,
                            "src": "7721:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3662,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3649,
                            "src": "7736:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 3663,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "TupleExpression",
                        "src": "7720:30:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 3664,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3649,
                            "src": "7754:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3665,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3647,
                            "src": "7769:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 3666,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "7753:30:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "src": "7720:63:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 3668,
                    "nodeType": "ExpressionStatement",
                    "src": "7720:63:39"
                  }
                },
                {
                  "assignments": [
                    3671
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3671,
                      "mutability": "mutable",
                      "name": "numerator1",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3713,
                      "src": "7794:18:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3670,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7794:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3679,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3674,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3651,
                          "src": "7823:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        ],
                        "id": 3673,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7815:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 3672,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7815:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 3675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7815:18:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3676,
                        "name": "FixedPoint96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2172,
                        "src": "7837:12:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                          "typeString": "type(library FixedPoint96)"
                        }
                      },
                      "id": 3677,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "RESOLUTION",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2168,
                      "src": "7837:23:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "7815:45:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7794:66:39"
                },
                {
                  "assignments": [
                    3681
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3681,
                      "mutability": "mutable",
                      "name": "numerator2",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3713,
                      "src": "7870:18:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3680,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7870:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3685,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 3684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3682,
                      "name": "sqrtRatioBX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3649,
                      "src": "7891:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3683,
                      "name": "sqrtRatioAX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3647,
                      "src": "7907:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "7891:29:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7870:50:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 3689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3687,
                          "name": "sqrtRatioAX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3647,
                          "src": "7939:13:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7955:1:39",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7939:17:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3686,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7931:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7931:26:39",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3691,
                  "nodeType": "ExpressionStatement",
                  "src": "7931:26:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 3692,
                      "name": "roundUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3653,
                      "src": "7987:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3705,
                            "name": "numerator1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3671,
                            "src": "8211:10:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3706,
                            "name": "numerator2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3681,
                            "src": "8223:10:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3707,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3649,
                            "src": "8235:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3703,
                            "name": "FullMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2345,
                            "src": "8195:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                              "typeString": "type(library FullMath)"
                            }
                          },
                          "id": 3704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mulDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2301,
                          "src": "8195:15:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 3708,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8195:54:39",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3709,
                        "name": "sqrtRatioAX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3647,
                        "src": "8252:13:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "src": "8195:70:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "7987:278:39",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3697,
                              "name": "numerator1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3671,
                              "src": "8085:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3698,
                              "name": "numerator2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3681,
                              "src": "8097:10:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3699,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3649,
                              "src": "8109:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3695,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2345,
                              "src": "8059:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 3696,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDivRoundingUp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2344,
                            "src": "8059:25:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 3700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8059:64:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3701,
                          "name": "sqrtRatioAX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3647,
                          "src": "8145:13:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3693,
                          "name": "UnsafeMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5298,
                          "src": "8013:10:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_UnsafeMath_$5298_$",
                            "typeString": "type(library UnsafeMath)"
                          }
                        },
                        "id": 3694,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "divRoundingUp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5297,
                        "src": "8013:24:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 3702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8013:163:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3657,
                  "id": 3712,
                  "nodeType": "Return",
                  "src": "7968:297:39"
                }
              ]
            },
            "documentation": {
              "id": 3645,
              "nodeType": "StructuredDocumentation",
              "src": "6951:537:39",
              "text": "@notice Gets the amount0 delta between two prices\n @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper),\n i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up or down\n @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices"
            },
            "id": 3714,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount0Delta",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3647,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3714,
                  "src": "7527:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3646,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "7527:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3649,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3714,
                  "src": "7558:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3648,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "7558:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3651,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3714,
                  "src": "7589:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 3650,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "7589:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3653,
                  "mutability": "mutable",
                  "name": "roundUp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3714,
                  "src": "7616:12:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3652,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7616:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7517:117:39"
            },
            "returnParameters": {
              "id": 3657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3656,
                  "mutability": "mutable",
                  "name": "amount0",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3714,
                  "src": "7658:15:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3655,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7658:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7657:17:39"
            },
            "scope": 3847,
            "src": "7493:779:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3761,
              "nodeType": "Block",
              "src": "8909:350:39",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 3730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3728,
                      "name": "sqrtRatioAX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3717,
                      "src": "8923:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3729,
                      "name": "sqrtRatioBX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3719,
                      "src": "8939:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "8923:29:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3739,
                  "nodeType": "IfStatement",
                  "src": "8919:98:39",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 3737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 3731,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3717,
                            "src": "8955:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3732,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3719,
                            "src": "8970:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 3733,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "TupleExpression",
                        "src": "8954:30:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 3734,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3719,
                            "src": "8988:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3735,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3717,
                            "src": "9003:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 3736,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "8987:30:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "src": "8954:63:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 3738,
                    "nodeType": "ExpressionStatement",
                    "src": "8954:63:39"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 3740,
                      "name": "roundUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3723,
                      "src": "9047:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3752,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3721,
                          "src": "9193:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 3755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3753,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3719,
                            "src": "9204:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3754,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3717,
                            "src": "9220:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "9204:29:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3756,
                            "name": "FixedPoint96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2172,
                            "src": "9235:12:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                              "typeString": "type(library FixedPoint96)"
                            }
                          },
                          "id": 3757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Q96",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2171,
                          "src": "9235:16:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3750,
                          "name": "FullMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2345,
                          "src": "9177:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                            "typeString": "type(library FullMath)"
                          }
                        },
                        "id": 3751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mulDiv",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2301,
                        "src": "9177:15:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 3758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9177:75:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "9047:205:39",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3743,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3721,
                          "src": "9099:9:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 3746,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3744,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3719,
                            "src": "9110:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3745,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3717,
                            "src": "9126:13:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "9110:29:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3747,
                            "name": "FixedPoint96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2172,
                            "src": "9141:12:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$2172_$",
                              "typeString": "type(library FixedPoint96)"
                            }
                          },
                          "id": 3748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Q96",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2171,
                          "src": "9141:16:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3741,
                          "name": "FullMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2345,
                          "src": "9073:8:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_FullMath_$2345_$",
                            "typeString": "type(library FullMath)"
                          }
                        },
                        "id": 3742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mulDivRoundingUp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2344,
                        "src": "9073:25:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 3749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9073:85:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3727,
                  "id": 3760,
                  "nodeType": "Return",
                  "src": "9028:224:39"
                }
              ]
            },
            "documentation": {
              "id": 3715,
              "nodeType": "StructuredDocumentation",
              "src": "8278:444:39",
              "text": "@notice Gets the amount1 delta between two prices\n @dev Calculates liquidity * (sqrt(upper) - sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up, or down\n @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices"
            },
            "id": 3762,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount1Delta",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3717,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3762,
                  "src": "8761:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3716,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "8761:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3719,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3762,
                  "src": "8792:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3718,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "8792:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3721,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3762,
                  "src": "8823:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 3720,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8823:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3723,
                  "mutability": "mutable",
                  "name": "roundUp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3762,
                  "src": "8850:12:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3722,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8850:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8751:117:39"
            },
            "returnParameters": {
              "id": 3727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3726,
                  "mutability": "mutable",
                  "name": "amount1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3762,
                  "src": "8892:15:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8892:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8891:17:39"
            },
            "scope": 3847,
            "src": "8727:532:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3803,
              "nodeType": "Block",
              "src": "9761:254:39",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int128",
                        "typeString": "int128"
                      },
                      "id": 3776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3774,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3769,
                        "src": "9790:9:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9802:1:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "9790:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3791,
                              "name": "sqrtRatioAX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3765,
                              "src": "9942:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3792,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3767,
                              "src": "9957:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3795,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3769,
                                  "src": "9980:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                ],
                                "id": 3794,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9972:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 3793,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9972:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9972:18:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 3797,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9992:4:39",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3790,
                            "name": "getAmount0Delta",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3714,
                              3804
                            ],
                            "referencedDeclaration": 3714,
                            "src": "9926:15:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                            }
                          },
                          "id": 3798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9926:71:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toInt256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3330,
                        "src": "9926:80:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (int256)"
                        }
                      },
                      "id": 3800,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9926:82:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 3801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "9790:218:39",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 3789,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "9822:85:39",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3778,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3765,
                                "src": "9839:13:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3779,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3767,
                                "src": "9854:13:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3783,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "9877:10:39",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "id": 3782,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3769,
                                      "src": "9878:9:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int128",
                                        "typeString": "int128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  ],
                                  "id": 3781,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9869:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 3780,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9869:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 3784,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9869:19:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 3785,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9890:5:39",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 3777,
                              "name": "getAmount0Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                3714,
                                3804
                              ],
                              "referencedDeclaration": 3714,
                              "src": "9823:15:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                              }
                            },
                            "id": 3786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9823:73:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toInt256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3330,
                          "src": "9823:82:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (int256)"
                          }
                        },
                        "id": 3788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9823:84:39",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 3773,
                  "id": 3802,
                  "nodeType": "Return",
                  "src": "9771:237:39"
                }
              ]
            },
            "documentation": {
              "id": 3763,
              "nodeType": "StructuredDocumentation",
              "src": "9265:333:39",
              "text": "@notice Helper that gets signed token0 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount0 delta\n @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices"
            },
            "id": 3804,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount0Delta",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3770,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3765,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3804,
                  "src": "9637:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3764,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "9637:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3767,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3804,
                  "src": "9668:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3766,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "9668:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3769,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3804,
                  "src": "9699:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int128",
                    "typeString": "int128"
                  },
                  "typeName": {
                    "id": 3768,
                    "name": "int128",
                    "nodeType": "ElementaryTypeName",
                    "src": "9699:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9627:94:39"
            },
            "returnParameters": {
              "id": 3773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3772,
                  "mutability": "mutable",
                  "name": "amount0",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3804,
                  "src": "9745:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 3771,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9745:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9744:16:39"
            },
            "scope": 3847,
            "src": "9603:412:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3845,
              "nodeType": "Block",
              "src": "10517:254:39",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int128",
                        "typeString": "int128"
                      },
                      "id": 3818,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3816,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3811,
                        "src": "10546:9:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10558:1:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "10546:13:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3833,
                              "name": "sqrtRatioAX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3807,
                              "src": "10698:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3834,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3809,
                              "src": "10713:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3837,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3811,
                                  "src": "10736:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                ],
                                "id": 3836,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10728:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 3835,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10728:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3838,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10728:18:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 3839,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10748:4:39",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3832,
                            "name": "getAmount1Delta",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3762,
                              3846
                            ],
                            "referencedDeclaration": 3762,
                            "src": "10682:15:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                            }
                          },
                          "id": 3840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10682:71:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toInt256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3330,
                        "src": "10682:80:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (int256)"
                        }
                      },
                      "id": 3842,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10682:82:39",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 3843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "10546:218:39",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 3831,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "10578:85:39",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3820,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3807,
                                "src": "10595:13:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3821,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3809,
                                "src": "10610:13:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3825,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "10633:10:39",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "id": 3824,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3811,
                                      "src": "10634:9:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int128",
                                        "typeString": "int128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  ],
                                  "id": 3823,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10625:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 3822,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10625:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 3826,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10625:19:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 3827,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10646:5:39",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 3819,
                              "name": "getAmount1Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                3762,
                                3846
                              ],
                              "referencedDeclaration": 3762,
                              "src": "10579:15:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                              }
                            },
                            "id": 3828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10579:73:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toInt256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3330,
                          "src": "10579:82:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (int256)"
                          }
                        },
                        "id": 3830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10579:84:39",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 3815,
                  "id": 3844,
                  "nodeType": "Return",
                  "src": "10527:237:39"
                }
              ]
            },
            "documentation": {
              "id": 3805,
              "nodeType": "StructuredDocumentation",
              "src": "10021:333:39",
              "text": "@notice Helper that gets signed token1 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount1 delta\n @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices"
            },
            "id": 3846,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount1Delta",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3807,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3846,
                  "src": "10393:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3806,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "10393:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3809,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3846,
                  "src": "10424:21:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3808,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "10424:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3811,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3846,
                  "src": "10455:16:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int128",
                    "typeString": "int128"
                  },
                  "typeName": {
                    "id": 3810,
                    "name": "int128",
                    "nodeType": "ElementaryTypeName",
                    "src": "10455:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10383:94:39"
            },
            "returnParameters": {
              "id": 3815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3814,
                  "mutability": "mutable",
                  "name": "amount1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3846,
                  "src": "10501:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 3813,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10501:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10500:16:39"
            },
            "scope": 3847,
            "src": "10359:412:39",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 3848,
        "src": "369:10404:39"
      }
    ],
    "src": "37:10737:39"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/interfaces/uniswap/SqrtPriceMath.sol",
      "exportedSymbols": {
        "SqrtPriceMath": [
          3847
        ]
      },
      "license": "BUSL-1.1"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.5",
            ".0"
          ]
        },
        "id": 3333,
        "name": "PragmaDirective",
        "src": "37:24:39"
      },
      {
        "attributes": {
          "SourceUnit": 3262,
          "absolutePath": "project:/contracts/interfaces/uniswap/LowGasSafeMath.sol",
          "file": "./LowGasSafeMath.sol",
          "scope": 3848,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3334,
        "name": "ImportDirective",
        "src": "63:30:39"
      },
      {
        "attributes": {
          "SourceUnit": 3332,
          "absolutePath": "project:/contracts/interfaces/uniswap/SafeCast.sol",
          "file": "./SafeCast.sol",
          "scope": 3848,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3335,
        "name": "ImportDirective",
        "src": "94:24:39"
      },
      {
        "attributes": {
          "SourceUnit": 2346,
          "absolutePath": "project:/contracts/interfaces/uniswap/FullMath.sol",
          "file": "./FullMath.sol",
          "scope": 3848,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3336,
        "name": "ImportDirective",
        "src": "120:24:39"
      },
      {
        "attributes": {
          "SourceUnit": 5299,
          "absolutePath": "project:/contracts/interfaces/uniswap/UnsafeMath.sol",
          "file": "./UnsafeMath.sol",
          "scope": 3848,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3337,
        "name": "ImportDirective",
        "src": "145:26:39"
      },
      {
        "attributes": {
          "SourceUnit": 2173,
          "absolutePath": "project:/contracts/interfaces/uniswap/FixedPoint96.sol",
          "file": "./FixedPoint96.sol",
          "scope": 3848,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3338,
        "name": "ImportDirective",
        "src": "172:28:39"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            3847
          ],
          "name": "SqrtPriceMath",
          "scope": 3848
        },
        "children": [
          {
            "attributes": {
              "text": "@title Functions based on Q64.96 sqrt price and liquidity\n @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas"
            },
            "id": 3339,
            "name": "StructuredDocumentation",
            "src": "202:167:39"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "LowGasSafeMath",
                  "referencedDeclaration": 3261,
                  "type": "library LowGasSafeMath"
                },
                "id": 3340,
                "name": "UserDefinedTypeName",
                "src": "403:14:39"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 3341,
                "name": "ElementaryTypeName",
                "src": "422:7:39"
              }
            ],
            "id": 3342,
            "name": "UsingForDirective",
            "src": "397:33:39"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeCast",
                  "referencedDeclaration": 3331,
                  "type": "library SafeCast"
                },
                "id": 3343,
                "name": "UserDefinedTypeName",
                "src": "441:8:39"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 3344,
                "name": "ElementaryTypeName",
                "src": "454:7:39"
              }
            ],
            "id": 3345,
            "name": "UsingForDirective",
            "src": "435:27:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromAmount0RoundingUp",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given a delta of token0\n @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the\n price less in order to not send too much output.\n The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96),\n if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount).\n @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token0 to add or remove from virtual reserves\n @param add Whether to add or remove the amount of token0\n @return The price after adding or removing amount, depending on add"
                },
                "id": 3346,
                "name": "StructuredDocumentation",
                "src": "468:932:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "overrides": null,
                      "scope": 3465,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3347,
                        "name": "ElementaryTypeName",
                        "src": "1461:7:39"
                      }
                    ],
                    "id": 3348,
                    "name": "VariableDeclaration",
                    "src": "1461:16:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3465,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 3349,
                        "name": "ElementaryTypeName",
                        "src": "1487:7:39"
                      }
                    ],
                    "id": 3350,
                    "name": "VariableDeclaration",
                    "src": "1487:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "overrides": null,
                      "scope": 3465,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3351,
                        "name": "ElementaryTypeName",
                        "src": "1514:7:39"
                      }
                    ],
                    "id": 3352,
                    "name": "VariableDeclaration",
                    "src": "1514:14:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "add",
                      "overrides": null,
                      "scope": 3465,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3353,
                        "name": "ElementaryTypeName",
                        "src": "1538:4:39"
                      }
                    ],
                    "id": 3354,
                    "name": "VariableDeclaration",
                    "src": "1538:8:39"
                  }
                ],
                "id": 3355,
                "name": "ParameterList",
                "src": "1451:101:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 3465,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3356,
                        "name": "ElementaryTypeName",
                        "src": "1576:7:39"
                      }
                    ],
                    "id": 3357,
                    "name": "VariableDeclaration",
                    "src": "1576:7:39"
                  }
                ],
                "id": 3358,
                "name": "ParameterList",
                "src": "1575:9:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3352,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 3359,
                            "name": "Identifier",
                            "src": "1711:6:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 3360,
                            "name": "Literal",
                            "src": "1721:1:39"
                          }
                        ],
                        "id": 3361,
                        "name": "BinaryOperation",
                        "src": "1711:11:39"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 3358
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3348,
                              "type": "uint160",
                              "value": "sqrtPX96"
                            },
                            "id": 3362,
                            "name": "Identifier",
                            "src": "1731:8:39"
                          }
                        ],
                        "id": 3363,
                        "name": "Return",
                        "src": "1724:15:39"
                      }
                    ],
                    "id": 3364,
                    "name": "IfStatement",
                    "src": "1707:32:39"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3366
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numerator1",
                          "overrides": null,
                          "scope": 3464,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3365,
                            "name": "ElementaryTypeName",
                            "src": "1749:7:39"
                          }
                        ],
                        "id": 3366,
                        "name": "VariableDeclaration",
                        "src": "1749:18:39"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<<",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": null
                                    },
                                    "id": 3367,
                                    "name": "ElementaryTypeName",
                                    "src": "1770:7:39"
                                  }
                                ],
                                "id": 3368,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1770:7:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3350,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3369,
                                "name": "Identifier",
                                "src": "1778:9:39"
                              }
                            ],
                            "id": 3370,
                            "name": "FunctionCall",
                            "src": "1770:18:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "RESOLUTION",
                              "referencedDeclaration": 2168,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2172,
                                  "type": "type(library FixedPoint96)",
                                  "value": "FixedPoint96"
                                },
                                "id": 3371,
                                "name": "Identifier",
                                "src": "1792:12:39"
                              }
                            ],
                            "id": 3372,
                            "name": "MemberAccess",
                            "src": "1792:23:39"
                          }
                        ],
                        "id": 3373,
                        "name": "BinaryOperation",
                        "src": "1770:45:39"
                      }
                    ],
                    "id": 3374,
                    "name": "VariableDeclarationStatement",
                    "src": "1749:66:39"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 3354,
                          "type": "bool",
                          "value": "add"
                        },
                        "id": 3375,
                        "name": "Identifier",
                        "src": "1830:3:39"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                3377
                              ],
                              "initialValue": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "product",
                                  "overrides": null,
                                  "scope": 3426,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 3376,
                                    "name": "ElementaryTypeName",
                                    "src": "1849:7:39"
                                  }
                                ],
                                "id": 3377,
                                "name": "VariableDeclaration",
                                "src": "1849:15:39"
                              }
                            ],
                            "id": 3378,
                            "name": "VariableDeclarationStatement",
                            "src": "1849:15:39"
                          },
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "/",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "=",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3377,
                                                  "type": "uint256",
                                                  "value": "product"
                                                },
                                                "id": 3379,
                                                "name": "Identifier",
                                                "src": "1883:7:39"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "*",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3352,
                                                      "type": "uint256",
                                                      "value": "amount"
                                                    },
                                                    "id": 3380,
                                                    "name": "Identifier",
                                                    "src": "1893:6:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3348,
                                                      "type": "uint160",
                                                      "value": "sqrtPX96"
                                                    },
                                                    "id": 3381,
                                                    "name": "Identifier",
                                                    "src": "1902:8:39"
                                                  }
                                                ],
                                                "id": 3382,
                                                "name": "BinaryOperation",
                                                "src": "1893:17:39"
                                              }
                                            ],
                                            "id": 3383,
                                            "name": "Assignment",
                                            "src": "1883:27:39"
                                          }
                                        ],
                                        "id": 3384,
                                        "name": "TupleExpression",
                                        "src": "1882:29:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3352,
                                          "type": "uint256",
                                          "value": "amount"
                                        },
                                        "id": 3385,
                                        "name": "Identifier",
                                        "src": "1914:6:39"
                                      }
                                    ],
                                    "id": 3386,
                                    "name": "BinaryOperation",
                                    "src": "1882:38:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3348,
                                      "type": "uint160",
                                      "value": "sqrtPX96"
                                    },
                                    "id": 3387,
                                    "name": "Identifier",
                                    "src": "1924:8:39"
                                  }
                                ],
                                "id": 3388,
                                "name": "BinaryOperation",
                                "src": "1882:50:39"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        3390
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "denominator",
                                          "overrides": null,
                                          "scope": 3409,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint256",
                                              "type": "uint256"
                                            },
                                            "id": 3389,
                                            "name": "ElementaryTypeName",
                                            "src": "1952:7:39"
                                          }
                                        ],
                                        "id": 3390,
                                        "name": "VariableDeclaration",
                                        "src": "1952:19:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3366,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 3391,
                                            "name": "Identifier",
                                            "src": "1974:10:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3377,
                                              "type": "uint256",
                                              "value": "product"
                                            },
                                            "id": 3392,
                                            "name": "Identifier",
                                            "src": "1987:7:39"
                                          }
                                        ],
                                        "id": 3393,
                                        "name": "BinaryOperation",
                                        "src": "1974:20:39"
                                      }
                                    ],
                                    "id": 3394,
                                    "name": "VariableDeclarationStatement",
                                    "src": "1952:42:39"
                                  },
                                  {
                                    "attributes": {
                                      "falseBody": null
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3390,
                                              "type": "uint256",
                                              "value": "denominator"
                                            },
                                            "id": 3395,
                                            "name": "Identifier",
                                            "src": "2016:11:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3366,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 3396,
                                            "name": "Identifier",
                                            "src": "2031:10:39"
                                          }
                                        ],
                                        "id": 3397,
                                        "name": "BinaryOperation",
                                        "src": "2016:25:39"
                                      },
                                      {
                                        "attributes": {
                                          "functionReturnParameters": 3358
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint160",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint160)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint160",
                                                      "type": null
                                                    },
                                                    "id": 3398,
                                                    "name": "ElementaryTypeName",
                                                    "src": "2117:7:39"
                                                  }
                                                ],
                                                "id": 3399,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "2117:7:39"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "uint256",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint160",
                                                          "typeString": "uint160"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "mulDivRoundingUp",
                                                      "referencedDeclaration": 2344,
                                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 2345,
                                                          "type": "type(library FullMath)",
                                                          "value": "FullMath"
                                                        },
                                                        "id": 3400,
                                                        "name": "Identifier",
                                                        "src": "2125:8:39"
                                                      }
                                                    ],
                                                    "id": 3401,
                                                    "name": "MemberAccess",
                                                    "src": "2125:25:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3366,
                                                      "type": "uint256",
                                                      "value": "numerator1"
                                                    },
                                                    "id": 3402,
                                                    "name": "Identifier",
                                                    "src": "2151:10:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3348,
                                                      "type": "uint160",
                                                      "value": "sqrtPX96"
                                                    },
                                                    "id": 3403,
                                                    "name": "Identifier",
                                                    "src": "2163:8:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3390,
                                                      "type": "uint256",
                                                      "value": "denominator"
                                                    },
                                                    "id": 3404,
                                                    "name": "Identifier",
                                                    "src": "2173:11:39"
                                                  }
                                                ],
                                                "id": 3405,
                                                "name": "FunctionCall",
                                                "src": "2125:60:39"
                                              }
                                            ],
                                            "id": 3406,
                                            "name": "FunctionCall",
                                            "src": "2117:69:39"
                                          }
                                        ],
                                        "id": 3407,
                                        "name": "Return",
                                        "src": "2110:76:39"
                                      }
                                    ],
                                    "id": 3408,
                                    "name": "IfStatement",
                                    "src": "2012:174:39"
                                  }
                                ],
                                "id": 3409,
                                "name": "Block",
                                "src": "1934:267:39"
                              }
                            ],
                            "id": 3410,
                            "name": "IfStatement",
                            "src": "1878:323:39"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 3358
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint160",
                                          "type": null
                                        },
                                        "id": 3411,
                                        "name": "ElementaryTypeName",
                                        "src": "2222:7:39"
                                      }
                                    ],
                                    "id": 3412,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2222:7:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "divRoundingUp",
                                          "referencedDeclaration": 5297,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5298,
                                              "type": "type(library UnsafeMath)",
                                              "value": "UnsafeMath"
                                            },
                                            "id": 3413,
                                            "name": "Identifier",
                                            "src": "2230:10:39"
                                          }
                                        ],
                                        "id": 3414,
                                        "name": "MemberAccess",
                                        "src": "2230:24:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3366,
                                          "type": "uint256",
                                          "value": "numerator1"
                                        },
                                        "id": 3415,
                                        "name": "Identifier",
                                        "src": "2255:10:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "add",
                                              "referencedDeclaration": 3156,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "/",
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 3366,
                                                          "type": "uint256",
                                                          "value": "numerator1"
                                                        },
                                                        "id": 3416,
                                                        "name": "Identifier",
                                                        "src": "2268:10:39"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 3348,
                                                          "type": "uint160",
                                                          "value": "sqrtPX96"
                                                        },
                                                        "id": 3417,
                                                        "name": "Identifier",
                                                        "src": "2281:8:39"
                                                      }
                                                    ],
                                                    "id": 3418,
                                                    "name": "BinaryOperation",
                                                    "src": "2268:21:39"
                                                  }
                                                ],
                                                "id": 3419,
                                                "name": "TupleExpression",
                                                "src": "2267:23:39"
                                              }
                                            ],
                                            "id": 3420,
                                            "name": "MemberAccess",
                                            "src": "2267:27:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3352,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 3421,
                                            "name": "Identifier",
                                            "src": "2295:6:39"
                                          }
                                        ],
                                        "id": 3422,
                                        "name": "FunctionCall",
                                        "src": "2267:35:39"
                                      }
                                    ],
                                    "id": 3423,
                                    "name": "FunctionCall",
                                    "src": "2230:73:39"
                                  }
                                ],
                                "id": 3424,
                                "name": "FunctionCall",
                                "src": "2222:82:39"
                              }
                            ],
                            "id": 3425,
                            "name": "Return",
                            "src": "2215:89:39"
                          }
                        ],
                        "id": 3426,
                        "name": "Block",
                        "src": "1835:480:39"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                3428
                              ],
                              "initialValue": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "product",
                                  "overrides": null,
                                  "scope": 3462,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 3427,
                                    "name": "ElementaryTypeName",
                                    "src": "2335:7:39"
                                  }
                                ],
                                "id": 3428,
                                "name": "VariableDeclaration",
                                "src": "2335:15:39"
                              }
                            ],
                            "id": 3429,
                            "name": "VariableDeclarationStatement",
                            "src": "2335:15:39"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 3430,
                                    "name": "Identifier",
                                    "src": "2522:7:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "&&",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "/",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "=",
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 3428,
                                                          "type": "uint256",
                                                          "value": "product"
                                                        },
                                                        "id": 3431,
                                                        "name": "Identifier",
                                                        "src": "2531:7:39"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "operator": "*",
                                                          "type": "uint256"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3352,
                                                              "type": "uint256",
                                                              "value": "amount"
                                                            },
                                                            "id": 3432,
                                                            "name": "Identifier",
                                                            "src": "2541:6:39"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3348,
                                                              "type": "uint160",
                                                              "value": "sqrtPX96"
                                                            },
                                                            "id": 3433,
                                                            "name": "Identifier",
                                                            "src": "2550:8:39"
                                                          }
                                                        ],
                                                        "id": 3434,
                                                        "name": "BinaryOperation",
                                                        "src": "2541:17:39"
                                                      }
                                                    ],
                                                    "id": 3435,
                                                    "name": "Assignment",
                                                    "src": "2531:27:39"
                                                  }
                                                ],
                                                "id": 3436,
                                                "name": "TupleExpression",
                                                "src": "2530:29:39"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3352,
                                                  "type": "uint256",
                                                  "value": "amount"
                                                },
                                                "id": 3437,
                                                "name": "Identifier",
                                                "src": "2562:6:39"
                                              }
                                            ],
                                            "id": 3438,
                                            "name": "BinaryOperation",
                                            "src": "2530:38:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3348,
                                              "type": "uint160",
                                              "value": "sqrtPX96"
                                            },
                                            "id": 3439,
                                            "name": "Identifier",
                                            "src": "2572:8:39"
                                          }
                                        ],
                                        "id": 3440,
                                        "name": "BinaryOperation",
                                        "src": "2530:50:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3366,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 3441,
                                            "name": "Identifier",
                                            "src": "2584:10:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3428,
                                              "type": "uint256",
                                              "value": "product"
                                            },
                                            "id": 3442,
                                            "name": "Identifier",
                                            "src": "2597:7:39"
                                          }
                                        ],
                                        "id": 3443,
                                        "name": "BinaryOperation",
                                        "src": "2584:20:39"
                                      }
                                    ],
                                    "id": 3444,
                                    "name": "BinaryOperation",
                                    "src": "2530:74:39"
                                  }
                                ],
                                "id": 3445,
                                "name": "FunctionCall",
                                "src": "2522:83:39"
                              }
                            ],
                            "id": 3446,
                            "name": "ExpressionStatement",
                            "src": "2522:83:39"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                3448
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "denominator",
                                  "overrides": null,
                                  "scope": 3462,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 3447,
                                    "name": "ElementaryTypeName",
                                    "src": "2619:7:39"
                                  }
                                ],
                                "id": 3448,
                                "name": "VariableDeclaration",
                                "src": "2619:19:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3366,
                                      "type": "uint256",
                                      "value": "numerator1"
                                    },
                                    "id": 3449,
                                    "name": "Identifier",
                                    "src": "2641:10:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3428,
                                      "type": "uint256",
                                      "value": "product"
                                    },
                                    "id": 3450,
                                    "name": "Identifier",
                                    "src": "2654:7:39"
                                  }
                                ],
                                "id": 3451,
                                "name": "BinaryOperation",
                                "src": "2641:20:39"
                              }
                            ],
                            "id": 3452,
                            "name": "VariableDeclarationStatement",
                            "src": "2619:42:39"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 3358
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toUint160",
                                      "referencedDeclaration": 3285,
                                      "type": "function (uint256) pure returns (uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDivRoundingUp",
                                              "referencedDeclaration": 2344,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2345,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 3453,
                                                "name": "Identifier",
                                                "src": "2682:8:39"
                                              }
                                            ],
                                            "id": 3454,
                                            "name": "MemberAccess",
                                            "src": "2682:25:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3366,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 3455,
                                            "name": "Identifier",
                                            "src": "2708:10:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3348,
                                              "type": "uint160",
                                              "value": "sqrtPX96"
                                            },
                                            "id": 3456,
                                            "name": "Identifier",
                                            "src": "2720:8:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3448,
                                              "type": "uint256",
                                              "value": "denominator"
                                            },
                                            "id": 3457,
                                            "name": "Identifier",
                                            "src": "2730:11:39"
                                          }
                                        ],
                                        "id": 3458,
                                        "name": "FunctionCall",
                                        "src": "2682:60:39"
                                      }
                                    ],
                                    "id": 3459,
                                    "name": "MemberAccess",
                                    "src": "2682:70:39"
                                  }
                                ],
                                "id": 3460,
                                "name": "FunctionCall",
                                "src": "2682:72:39"
                              }
                            ],
                            "id": 3461,
                            "name": "Return",
                            "src": "2675:79:39"
                          }
                        ],
                        "id": 3462,
                        "name": "Block",
                        "src": "2321:444:39"
                      }
                    ],
                    "id": 3463,
                    "name": "IfStatement",
                    "src": "1826:939:39"
                  }
                ],
                "id": 3464,
                "name": "Block",
                "src": "1585:1186:39"
              }
            ],
            "id": 3465,
            "name": "FunctionDefinition",
            "src": "1405:1366:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromAmount1RoundingDown",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given a delta of token1\n @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the\n price less in order to not send too much output.\n The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity\n @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token1 to add, or remove, from virtual reserves\n @param add Whether to add, or remove, the amount of token1\n @return The price after adding or removing `amount`"
                },
                "id": 3466,
                "name": "StructuredDocumentation",
                "src": "2777:815:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "overrides": null,
                      "scope": 3560,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3467,
                        "name": "ElementaryTypeName",
                        "src": "3655:7:39"
                      }
                    ],
                    "id": 3468,
                    "name": "VariableDeclaration",
                    "src": "3655:16:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3560,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 3469,
                        "name": "ElementaryTypeName",
                        "src": "3681:7:39"
                      }
                    ],
                    "id": 3470,
                    "name": "VariableDeclaration",
                    "src": "3681:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "overrides": null,
                      "scope": 3560,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3471,
                        "name": "ElementaryTypeName",
                        "src": "3708:7:39"
                      }
                    ],
                    "id": 3472,
                    "name": "VariableDeclaration",
                    "src": "3708:14:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "add",
                      "overrides": null,
                      "scope": 3560,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3473,
                        "name": "ElementaryTypeName",
                        "src": "3732:4:39"
                      }
                    ],
                    "id": 3474,
                    "name": "VariableDeclaration",
                    "src": "3732:8:39"
                  }
                ],
                "id": 3475,
                "name": "ParameterList",
                "src": "3645:101:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 3560,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3476,
                        "name": "ElementaryTypeName",
                        "src": "3770:7:39"
                      }
                    ],
                    "id": 3477,
                    "name": "VariableDeclaration",
                    "src": "3770:7:39"
                  }
                ],
                "id": 3478,
                "name": "ParameterList",
                "src": "3769:9:39"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 3474,
                          "type": "bool",
                          "value": "add"
                        },
                        "id": 3479,
                        "name": "Identifier",
                        "src": "3947:3:39"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                3481
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "quotient",
                                  "overrides": null,
                                  "scope": 3516,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 3480,
                                    "name": "ElementaryTypeName",
                                    "src": "3966:7:39"
                                  }
                                ],
                                "id": 3481,
                                "name": "VariableDeclaration",
                                "src": "3966:16:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "<=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3472,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 3482,
                                            "name": "Identifier",
                                            "src": "4023:6:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "max",
                                              "referencedDeclaration": null,
                                              "type": "uint160"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "type(uint160)",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_type$_t_uint160_$",
                                                          "typeString": "type(uint160)"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": -27,
                                                      "type": "function () pure",
                                                      "value": "type"
                                                    },
                                                    "id": 3483,
                                                    "name": "Identifier",
                                                    "src": "4033:4:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint160)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint160",
                                                          "type": null
                                                        },
                                                        "id": 3484,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4038:7:39"
                                                      }
                                                    ],
                                                    "id": 3485,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4038:7:39"
                                                  }
                                                ],
                                                "id": 3486,
                                                "name": "FunctionCall",
                                                "src": "4033:13:39"
                                              }
                                            ],
                                            "id": 3487,
                                            "name": "MemberAccess",
                                            "src": "4033:17:39"
                                          }
                                        ],
                                        "id": 3488,
                                        "name": "BinaryOperation",
                                        "src": "4023:27:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "/",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "<<",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3472,
                                                      "type": "uint256",
                                                      "value": "amount"
                                                    },
                                                    "id": 3489,
                                                    "name": "Identifier",
                                                    "src": "4078:6:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "RESOLUTION",
                                                      "referencedDeclaration": 2168,
                                                      "type": "uint8"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 2172,
                                                          "type": "type(library FixedPoint96)",
                                                          "value": "FixedPoint96"
                                                        },
                                                        "id": 3490,
                                                        "name": "Identifier",
                                                        "src": "4088:12:39"
                                                      }
                                                    ],
                                                    "id": 3491,
                                                    "name": "MemberAccess",
                                                    "src": "4088:23:39"
                                                  }
                                                ],
                                                "id": 3492,
                                                "name": "BinaryOperation",
                                                "src": "4078:33:39"
                                              }
                                            ],
                                            "id": 3493,
                                            "name": "TupleExpression",
                                            "src": "4077:35:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3470,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 3494,
                                            "name": "Identifier",
                                            "src": "4115:9:39"
                                          }
                                        ],
                                        "id": 3495,
                                        "name": "BinaryOperation",
                                        "src": "4077:47:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDiv",
                                              "referencedDeclaration": 2301,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2345,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 3496,
                                                "name": "Identifier",
                                                "src": "4151:8:39"
                                              }
                                            ],
                                            "id": 3497,
                                            "name": "MemberAccess",
                                            "src": "4151:15:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3472,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 3498,
                                            "name": "Identifier",
                                            "src": "4167:6:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "Q96",
                                              "referencedDeclaration": 2171,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2172,
                                                  "type": "type(library FixedPoint96)",
                                                  "value": "FixedPoint96"
                                                },
                                                "id": 3499,
                                                "name": "Identifier",
                                                "src": "4175:12:39"
                                              }
                                            ],
                                            "id": 3500,
                                            "name": "MemberAccess",
                                            "src": "4175:16:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3470,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 3501,
                                            "name": "Identifier",
                                            "src": "4193:9:39"
                                          }
                                        ],
                                        "id": 3502,
                                        "name": "FunctionCall",
                                        "src": "4151:52:39"
                                      }
                                    ],
                                    "id": 3503,
                                    "name": "Conditional",
                                    "src": "4023:180:39"
                                  }
                                ],
                                "id": 3504,
                                "name": "TupleExpression",
                                "src": "4001:220:39"
                              }
                            ],
                            "id": 3505,
                            "name": "VariableDeclarationStatement",
                            "src": "3966:255:39"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 3478
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toUint160",
                                      "referencedDeclaration": 3285,
                                      "type": "function (uint256) pure returns (uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "add",
                                              "referencedDeclaration": 3156,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "uint256",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint160",
                                                          "typeString": "uint160"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint256",
                                                          "type": null
                                                        },
                                                        "id": 3506,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4243:7:39"
                                                      }
                                                    ],
                                                    "id": 3507,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4243:7:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3468,
                                                      "type": "uint160",
                                                      "value": "sqrtPX96"
                                                    },
                                                    "id": 3508,
                                                    "name": "Identifier",
                                                    "src": "4251:8:39"
                                                  }
                                                ],
                                                "id": 3509,
                                                "name": "FunctionCall",
                                                "src": "4243:17:39"
                                              }
                                            ],
                                            "id": 3510,
                                            "name": "MemberAccess",
                                            "src": "4243:21:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3481,
                                              "type": "uint256",
                                              "value": "quotient"
                                            },
                                            "id": 3511,
                                            "name": "Identifier",
                                            "src": "4265:8:39"
                                          }
                                        ],
                                        "id": 3512,
                                        "name": "FunctionCall",
                                        "src": "4243:31:39"
                                      }
                                    ],
                                    "id": 3513,
                                    "name": "MemberAccess",
                                    "src": "4243:41:39"
                                  }
                                ],
                                "id": 3514,
                                "name": "FunctionCall",
                                "src": "4243:43:39"
                              }
                            ],
                            "id": 3515,
                            "name": "Return",
                            "src": "4236:50:39"
                          }
                        ],
                        "id": 3516,
                        "name": "Block",
                        "src": "3952:345:39"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                3518
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "quotient",
                                  "overrides": null,
                                  "scope": 3557,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 3517,
                                    "name": "ElementaryTypeName",
                                    "src": "4317:7:39"
                                  }
                                ],
                                "id": 3518,
                                "name": "VariableDeclaration",
                                "src": "4317:16:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "<=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3472,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 3519,
                                            "name": "Identifier",
                                            "src": "4374:6:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "max",
                                              "referencedDeclaration": null,
                                              "type": "uint160"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "type(uint160)",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_type$_t_uint160_$",
                                                          "typeString": "type(uint160)"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": -27,
                                                      "type": "function () pure",
                                                      "value": "type"
                                                    },
                                                    "id": 3520,
                                                    "name": "Identifier",
                                                    "src": "4384:4:39"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint160)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint160",
                                                          "type": null
                                                        },
                                                        "id": 3521,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4389:7:39"
                                                      }
                                                    ],
                                                    "id": 3522,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4389:7:39"
                                                  }
                                                ],
                                                "id": 3523,
                                                "name": "FunctionCall",
                                                "src": "4384:13:39"
                                              }
                                            ],
                                            "id": 3524,
                                            "name": "MemberAccess",
                                            "src": "4384:17:39"
                                          }
                                        ],
                                        "id": 3525,
                                        "name": "BinaryOperation",
                                        "src": "4374:27:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "divRoundingUp",
                                              "referencedDeclaration": 5297,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5298,
                                                  "type": "type(library UnsafeMath)",
                                                  "value": "UnsafeMath"
                                                },
                                                "id": 3526,
                                                "name": "Identifier",
                                                "src": "4428:10:39"
                                              }
                                            ],
                                            "id": 3527,
                                            "name": "MemberAccess",
                                            "src": "4428:24:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<<",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3472,
                                                  "type": "uint256",
                                                  "value": "amount"
                                                },
                                                "id": 3528,
                                                "name": "Identifier",
                                                "src": "4453:6:39"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "RESOLUTION",
                                                  "referencedDeclaration": 2168,
                                                  "type": "uint8"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2172,
                                                      "type": "type(library FixedPoint96)",
                                                      "value": "FixedPoint96"
                                                    },
                                                    "id": 3529,
                                                    "name": "Identifier",
                                                    "src": "4463:12:39"
                                                  }
                                                ],
                                                "id": 3530,
                                                "name": "MemberAccess",
                                                "src": "4463:23:39"
                                              }
                                            ],
                                            "id": 3531,
                                            "name": "BinaryOperation",
                                            "src": "4453:33:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3470,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 3532,
                                            "name": "Identifier",
                                            "src": "4488:9:39"
                                          }
                                        ],
                                        "id": 3533,
                                        "name": "FunctionCall",
                                        "src": "4428:70:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDivRoundingUp",
                                              "referencedDeclaration": 2344,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2345,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 3534,
                                                "name": "Identifier",
                                                "src": "4525:8:39"
                                              }
                                            ],
                                            "id": 3535,
                                            "name": "MemberAccess",
                                            "src": "4525:25:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3472,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 3536,
                                            "name": "Identifier",
                                            "src": "4551:6:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "Q96",
                                              "referencedDeclaration": 2171,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2172,
                                                  "type": "type(library FixedPoint96)",
                                                  "value": "FixedPoint96"
                                                },
                                                "id": 3537,
                                                "name": "Identifier",
                                                "src": "4559:12:39"
                                              }
                                            ],
                                            "id": 3538,
                                            "name": "MemberAccess",
                                            "src": "4559:16:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3470,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 3539,
                                            "name": "Identifier",
                                            "src": "4577:9:39"
                                          }
                                        ],
                                        "id": 3540,
                                        "name": "FunctionCall",
                                        "src": "4525:62:39"
                                      }
                                    ],
                                    "id": 3541,
                                    "name": "Conditional",
                                    "src": "4374:213:39"
                                  }
                                ],
                                "id": 3542,
                                "name": "TupleExpression",
                                "src": "4352:253:39"
                              }
                            ],
                            "id": 3543,
                            "name": "VariableDeclarationStatement",
                            "src": "4317:288:39"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 3544,
                                    "name": "Identifier",
                                    "src": "4620:7:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": ">",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3468,
                                          "type": "uint160",
                                          "value": "sqrtPX96"
                                        },
                                        "id": 3545,
                                        "name": "Identifier",
                                        "src": "4628:8:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3518,
                                          "type": "uint256",
                                          "value": "quotient"
                                        },
                                        "id": 3546,
                                        "name": "Identifier",
                                        "src": "4639:8:39"
                                      }
                                    ],
                                    "id": 3547,
                                    "name": "BinaryOperation",
                                    "src": "4628:19:39"
                                  }
                                ],
                                "id": 3548,
                                "name": "FunctionCall",
                                "src": "4620:28:39"
                              }
                            ],
                            "id": 3549,
                            "name": "ExpressionStatement",
                            "src": "4620:28:39"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 3478
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint160",
                                          "type": null
                                        },
                                        "id": 3550,
                                        "name": "ElementaryTypeName",
                                        "src": "4705:7:39"
                                      }
                                    ],
                                    "id": 3551,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4705:7:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3468,
                                          "type": "uint160",
                                          "value": "sqrtPX96"
                                        },
                                        "id": 3552,
                                        "name": "Identifier",
                                        "src": "4713:8:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3518,
                                          "type": "uint256",
                                          "value": "quotient"
                                        },
                                        "id": 3553,
                                        "name": "Identifier",
                                        "src": "4724:8:39"
                                      }
                                    ],
                                    "id": 3554,
                                    "name": "BinaryOperation",
                                    "src": "4713:19:39"
                                  }
                                ],
                                "id": 3555,
                                "name": "FunctionCall",
                                "src": "4705:28:39"
                              }
                            ],
                            "id": 3556,
                            "name": "Return",
                            "src": "4698:35:39"
                          }
                        ],
                        "id": 3557,
                        "name": "Block",
                        "src": "4303:441:39"
                      }
                    ],
                    "id": 3558,
                    "name": "IfStatement",
                    "src": "3943:801:39"
                  }
                ],
                "id": 3559,
                "name": "Block",
                "src": "3779:971:39"
              }
            ],
            "id": 3560,
            "name": "FunctionDefinition",
            "src": "3597:1153:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromInput",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given an input amount of token0 or token1\n @dev Throws if price or liquidity are 0, or if the next price is out of bounds\n @param sqrtPX96 The starting price, i.e., before accounting for the input amount\n @param liquidity The amount of usable liquidity\n @param amountIn How much of token0, or token1, is being swapped in\n @param zeroForOne Whether the amount in is token0 or token1\n @return sqrtQX96 The price after adding the input amount to token0 or token1"
                },
                "id": 3561,
                "name": "StructuredDocumentation",
                "src": "4756:538:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "overrides": null,
                      "scope": 3602,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3562,
                        "name": "ElementaryTypeName",
                        "src": "5343:7:39"
                      }
                    ],
                    "id": 3563,
                    "name": "VariableDeclaration",
                    "src": "5343:16:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3602,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 3564,
                        "name": "ElementaryTypeName",
                        "src": "5369:7:39"
                      }
                    ],
                    "id": 3565,
                    "name": "VariableDeclaration",
                    "src": "5369:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 3602,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3566,
                        "name": "ElementaryTypeName",
                        "src": "5396:7:39"
                      }
                    ],
                    "id": 3567,
                    "name": "VariableDeclaration",
                    "src": "5396:16:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "zeroForOne",
                      "overrides": null,
                      "scope": 3602,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3568,
                        "name": "ElementaryTypeName",
                        "src": "5422:4:39"
                      }
                    ],
                    "id": 3569,
                    "name": "VariableDeclaration",
                    "src": "5422:15:39"
                  }
                ],
                "id": 3570,
                "name": "ParameterList",
                "src": "5333:110:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtQX96",
                      "overrides": null,
                      "scope": 3602,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3571,
                        "name": "ElementaryTypeName",
                        "src": "5467:7:39"
                      }
                    ],
                    "id": 3572,
                    "name": "VariableDeclaration",
                    "src": "5467:16:39"
                  }
                ],
                "id": 3573,
                "name": "ParameterList",
                "src": "5466:18:39"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3574,
                            "name": "Identifier",
                            "src": "5495:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3563,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 3575,
                                "name": "Identifier",
                                "src": "5503:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3576,
                                "name": "Literal",
                                "src": "5514:1:39"
                              }
                            ],
                            "id": 3577,
                            "name": "BinaryOperation",
                            "src": "5503:12:39"
                          }
                        ],
                        "id": 3578,
                        "name": "FunctionCall",
                        "src": "5495:21:39"
                      }
                    ],
                    "id": 3579,
                    "name": "ExpressionStatement",
                    "src": "5495:21:39"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3580,
                            "name": "Identifier",
                            "src": "5526:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3565,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3581,
                                "name": "Identifier",
                                "src": "5534:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3582,
                                "name": "Literal",
                                "src": "5546:1:39"
                              }
                            ],
                            "id": 3583,
                            "name": "BinaryOperation",
                            "src": "5534:13:39"
                          }
                        ],
                        "id": 3584,
                        "name": "FunctionCall",
                        "src": "5526:22:39"
                      }
                    ],
                    "id": 3585,
                    "name": "ExpressionStatement",
                    "src": "5526:22:39"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3573
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint160"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3569,
                              "type": "bool",
                              "value": "zeroForOne"
                            },
                            "id": 3586,
                            "name": "Identifier",
                            "src": "5644:10:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3465,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount0RoundingUp"
                                },
                                "id": 3587,
                                "name": "Identifier",
                                "src": "5673:37:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3563,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 3588,
                                "name": "Identifier",
                                "src": "5711:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3565,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3589,
                                "name": "Identifier",
                                "src": "5721:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3567,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 3590,
                                "name": "Identifier",
                                "src": "5732:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 3591,
                                "name": "Literal",
                                "src": "5742:4:39"
                              }
                            ],
                            "id": 3592,
                            "name": "FunctionCall",
                            "src": "5673:74:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3560,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount1RoundingDown"
                                },
                                "id": 3593,
                                "name": "Identifier",
                                "src": "5766:39:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3563,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 3594,
                                "name": "Identifier",
                                "src": "5806:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3565,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3595,
                                "name": "Identifier",
                                "src": "5816:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3567,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 3596,
                                "name": "Identifier",
                                "src": "5827:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 3597,
                                "name": "Literal",
                                "src": "5837:4:39"
                              }
                            ],
                            "id": 3598,
                            "name": "FunctionCall",
                            "src": "5766:76:39"
                          }
                        ],
                        "id": 3599,
                        "name": "Conditional",
                        "src": "5644:198:39"
                      }
                    ],
                    "id": 3600,
                    "name": "Return",
                    "src": "5625:217:39"
                  }
                ],
                "id": 3601,
                "name": "Block",
                "src": "5485:364:39"
              }
            ],
            "id": 3602,
            "name": "FunctionDefinition",
            "src": "5299:550:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromOutput",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given an output amount of token0 or token1\n @dev Throws if price or liquidity are 0 or the next price is out of bounds\n @param sqrtPX96 The starting price before accounting for the output amount\n @param liquidity The amount of usable liquidity\n @param amountOut How much of token0, or token1, is being swapped out\n @param zeroForOne Whether the amount out is token0 or token1\n @return sqrtQX96 The price after removing the output amount of token0 or token1"
                },
                "id": 3603,
                "name": "StructuredDocumentation",
                "src": "5855:535:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "overrides": null,
                      "scope": 3644,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3604,
                        "name": "ElementaryTypeName",
                        "src": "6440:7:39"
                      }
                    ],
                    "id": 3605,
                    "name": "VariableDeclaration",
                    "src": "6440:16:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3644,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 3606,
                        "name": "ElementaryTypeName",
                        "src": "6466:7:39"
                      }
                    ],
                    "id": 3607,
                    "name": "VariableDeclaration",
                    "src": "6466:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 3644,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3608,
                        "name": "ElementaryTypeName",
                        "src": "6493:7:39"
                      }
                    ],
                    "id": 3609,
                    "name": "VariableDeclaration",
                    "src": "6493:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "zeroForOne",
                      "overrides": null,
                      "scope": 3644,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3610,
                        "name": "ElementaryTypeName",
                        "src": "6520:4:39"
                      }
                    ],
                    "id": 3611,
                    "name": "VariableDeclaration",
                    "src": "6520:15:39"
                  }
                ],
                "id": 3612,
                "name": "ParameterList",
                "src": "6430:111:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtQX96",
                      "overrides": null,
                      "scope": 3644,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3613,
                        "name": "ElementaryTypeName",
                        "src": "6565:7:39"
                      }
                    ],
                    "id": 3614,
                    "name": "VariableDeclaration",
                    "src": "6565:16:39"
                  }
                ],
                "id": 3615,
                "name": "ParameterList",
                "src": "6564:18:39"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3616,
                            "name": "Identifier",
                            "src": "6593:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3605,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 3617,
                                "name": "Identifier",
                                "src": "6601:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3618,
                                "name": "Literal",
                                "src": "6612:1:39"
                              }
                            ],
                            "id": 3619,
                            "name": "BinaryOperation",
                            "src": "6601:12:39"
                          }
                        ],
                        "id": 3620,
                        "name": "FunctionCall",
                        "src": "6593:21:39"
                      }
                    ],
                    "id": 3621,
                    "name": "ExpressionStatement",
                    "src": "6593:21:39"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3622,
                            "name": "Identifier",
                            "src": "6624:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3607,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3623,
                                "name": "Identifier",
                                "src": "6632:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3624,
                                "name": "Literal",
                                "src": "6644:1:39"
                              }
                            ],
                            "id": 3625,
                            "name": "BinaryOperation",
                            "src": "6632:13:39"
                          }
                        ],
                        "id": 3626,
                        "name": "FunctionCall",
                        "src": "6624:22:39"
                      }
                    ],
                    "id": 3627,
                    "name": "ExpressionStatement",
                    "src": "6624:22:39"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3615
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint160"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3611,
                              "type": "bool",
                              "value": "zeroForOne"
                            },
                            "id": 3628,
                            "name": "Identifier",
                            "src": "6736:10:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3560,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount1RoundingDown"
                                },
                                "id": 3629,
                                "name": "Identifier",
                                "src": "6765:39:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3605,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 3630,
                                "name": "Identifier",
                                "src": "6805:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3607,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3631,
                                "name": "Identifier",
                                "src": "6815:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3609,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 3632,
                                "name": "Identifier",
                                "src": "6826:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 3633,
                                "name": "Literal",
                                "src": "6837:5:39"
                              }
                            ],
                            "id": 3634,
                            "name": "FunctionCall",
                            "src": "6765:78:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3465,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount0RoundingUp"
                                },
                                "id": 3635,
                                "name": "Identifier",
                                "src": "6862:37:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3605,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 3636,
                                "name": "Identifier",
                                "src": "6900:8:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3607,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3637,
                                "name": "Identifier",
                                "src": "6910:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3609,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 3638,
                                "name": "Identifier",
                                "src": "6921:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 3639,
                                "name": "Literal",
                                "src": "6932:5:39"
                              }
                            ],
                            "id": 3640,
                            "name": "FunctionCall",
                            "src": "6862:76:39"
                          }
                        ],
                        "id": 3641,
                        "name": "Conditional",
                        "src": "6736:202:39"
                      }
                    ],
                    "id": 3642,
                    "name": "Return",
                    "src": "6717:221:39"
                  }
                ],
                "id": 3643,
                "name": "Block",
                "src": "6583:362:39"
              }
            ],
            "id": 3644,
            "name": "FunctionDefinition",
            "src": "6395:550:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount0Delta",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the amount0 delta between two prices\n @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper),\n i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up or down\n @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices"
                },
                "id": 3645,
                "name": "StructuredDocumentation",
                "src": "6951:537:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "overrides": null,
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3646,
                        "name": "ElementaryTypeName",
                        "src": "7527:7:39"
                      }
                    ],
                    "id": 3647,
                    "name": "VariableDeclaration",
                    "src": "7527:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "overrides": null,
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3648,
                        "name": "ElementaryTypeName",
                        "src": "7558:7:39"
                      }
                    ],
                    "id": 3649,
                    "name": "VariableDeclaration",
                    "src": "7558:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 3650,
                        "name": "ElementaryTypeName",
                        "src": "7589:7:39"
                      }
                    ],
                    "id": 3651,
                    "name": "VariableDeclaration",
                    "src": "7589:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "roundUp",
                      "overrides": null,
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3652,
                        "name": "ElementaryTypeName",
                        "src": "7616:4:39"
                      }
                    ],
                    "id": 3653,
                    "name": "VariableDeclaration",
                    "src": "7616:12:39"
                  }
                ],
                "id": 3654,
                "name": "ParameterList",
                "src": "7517:117:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount0",
                      "overrides": null,
                      "scope": 3714,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3655,
                        "name": "ElementaryTypeName",
                        "src": "7658:7:39"
                      }
                    ],
                    "id": 3656,
                    "name": "VariableDeclaration",
                    "src": "7658:15:39"
                  }
                ],
                "id": 3657,
                "name": "ParameterList",
                "src": "7657:17:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3647,
                              "type": "uint160",
                              "value": "sqrtRatioAX96"
                            },
                            "id": 3658,
                            "name": "Identifier",
                            "src": "7689:13:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3649,
                              "type": "uint160",
                              "value": "sqrtRatioBX96"
                            },
                            "id": 3659,
                            "name": "Identifier",
                            "src": "7705:13:39"
                          }
                        ],
                        "id": 3660,
                        "name": "BinaryOperation",
                        "src": "7689:29:39"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "tuple()"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3647,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 3661,
                                    "name": "Identifier",
                                    "src": "7721:13:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3649,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3662,
                                    "name": "Identifier",
                                    "src": "7736:13:39"
                                  }
                                ],
                                "id": 3663,
                                "name": "TupleExpression",
                                "src": "7720:30:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3649,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3664,
                                    "name": "Identifier",
                                    "src": "7754:13:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3647,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 3665,
                                    "name": "Identifier",
                                    "src": "7769:13:39"
                                  }
                                ],
                                "id": 3666,
                                "name": "TupleExpression",
                                "src": "7753:30:39"
                              }
                            ],
                            "id": 3667,
                            "name": "Assignment",
                            "src": "7720:63:39"
                          }
                        ],
                        "id": 3668,
                        "name": "ExpressionStatement",
                        "src": "7720:63:39"
                      }
                    ],
                    "id": 3669,
                    "name": "IfStatement",
                    "src": "7685:98:39"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3671
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numerator1",
                          "overrides": null,
                          "scope": 3713,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3670,
                            "name": "ElementaryTypeName",
                            "src": "7794:7:39"
                          }
                        ],
                        "id": 3671,
                        "name": "VariableDeclaration",
                        "src": "7794:18:39"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<<",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": null
                                    },
                                    "id": 3672,
                                    "name": "ElementaryTypeName",
                                    "src": "7815:7:39"
                                  }
                                ],
                                "id": 3673,
                                "name": "ElementaryTypeNameExpression",
                                "src": "7815:7:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3651,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3674,
                                "name": "Identifier",
                                "src": "7823:9:39"
                              }
                            ],
                            "id": 3675,
                            "name": "FunctionCall",
                            "src": "7815:18:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "RESOLUTION",
                              "referencedDeclaration": 2168,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2172,
                                  "type": "type(library FixedPoint96)",
                                  "value": "FixedPoint96"
                                },
                                "id": 3676,
                                "name": "Identifier",
                                "src": "7837:12:39"
                              }
                            ],
                            "id": 3677,
                            "name": "MemberAccess",
                            "src": "7837:23:39"
                          }
                        ],
                        "id": 3678,
                        "name": "BinaryOperation",
                        "src": "7815:45:39"
                      }
                    ],
                    "id": 3679,
                    "name": "VariableDeclarationStatement",
                    "src": "7794:66:39"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3681
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numerator2",
                          "overrides": null,
                          "scope": 3713,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3680,
                            "name": "ElementaryTypeName",
                            "src": "7870:7:39"
                          }
                        ],
                        "id": 3681,
                        "name": "VariableDeclaration",
                        "src": "7870:18:39"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint160"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3649,
                              "type": "uint160",
                              "value": "sqrtRatioBX96"
                            },
                            "id": 3682,
                            "name": "Identifier",
                            "src": "7891:13:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3647,
                              "type": "uint160",
                              "value": "sqrtRatioAX96"
                            },
                            "id": 3683,
                            "name": "Identifier",
                            "src": "7907:13:39"
                          }
                        ],
                        "id": 3684,
                        "name": "BinaryOperation",
                        "src": "7891:29:39"
                      }
                    ],
                    "id": 3685,
                    "name": "VariableDeclarationStatement",
                    "src": "7870:50:39"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3686,
                            "name": "Identifier",
                            "src": "7931:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3647,
                                  "type": "uint160",
                                  "value": "sqrtRatioAX96"
                                },
                                "id": 3687,
                                "name": "Identifier",
                                "src": "7939:13:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3688,
                                "name": "Literal",
                                "src": "7955:1:39"
                              }
                            ],
                            "id": 3689,
                            "name": "BinaryOperation",
                            "src": "7939:17:39"
                          }
                        ],
                        "id": 3690,
                        "name": "FunctionCall",
                        "src": "7931:26:39"
                      }
                    ],
                    "id": 3691,
                    "name": "ExpressionStatement",
                    "src": "7931:26:39"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3657
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3653,
                              "type": "bool",
                              "value": "roundUp"
                            },
                            "id": 3692,
                            "name": "Identifier",
                            "src": "7987:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "divRoundingUp",
                                  "referencedDeclaration": 5297,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5298,
                                      "type": "type(library UnsafeMath)",
                                      "value": "UnsafeMath"
                                    },
                                    "id": 3693,
                                    "name": "Identifier",
                                    "src": "8013:10:39"
                                  }
                                ],
                                "id": 3694,
                                "name": "MemberAccess",
                                "src": "8013:24:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mulDivRoundingUp",
                                      "referencedDeclaration": 2344,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2345,
                                          "type": "type(library FullMath)",
                                          "value": "FullMath"
                                        },
                                        "id": 3695,
                                        "name": "Identifier",
                                        "src": "8059:8:39"
                                      }
                                    ],
                                    "id": 3696,
                                    "name": "MemberAccess",
                                    "src": "8059:25:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3671,
                                      "type": "uint256",
                                      "value": "numerator1"
                                    },
                                    "id": 3697,
                                    "name": "Identifier",
                                    "src": "8085:10:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3681,
                                      "type": "uint256",
                                      "value": "numerator2"
                                    },
                                    "id": 3698,
                                    "name": "Identifier",
                                    "src": "8097:10:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3649,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3699,
                                    "name": "Identifier",
                                    "src": "8109:13:39"
                                  }
                                ],
                                "id": 3700,
                                "name": "FunctionCall",
                                "src": "8059:64:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3647,
                                  "type": "uint160",
                                  "value": "sqrtRatioAX96"
                                },
                                "id": 3701,
                                "name": "Identifier",
                                "src": "8145:13:39"
                              }
                            ],
                            "id": 3702,
                            "name": "FunctionCall",
                            "src": "8013:163:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mulDiv",
                                      "referencedDeclaration": 2301,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2345,
                                          "type": "type(library FullMath)",
                                          "value": "FullMath"
                                        },
                                        "id": 3703,
                                        "name": "Identifier",
                                        "src": "8195:8:39"
                                      }
                                    ],
                                    "id": 3704,
                                    "name": "MemberAccess",
                                    "src": "8195:15:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3671,
                                      "type": "uint256",
                                      "value": "numerator1"
                                    },
                                    "id": 3705,
                                    "name": "Identifier",
                                    "src": "8211:10:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3681,
                                      "type": "uint256",
                                      "value": "numerator2"
                                    },
                                    "id": 3706,
                                    "name": "Identifier",
                                    "src": "8223:10:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3649,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3707,
                                    "name": "Identifier",
                                    "src": "8235:13:39"
                                  }
                                ],
                                "id": 3708,
                                "name": "FunctionCall",
                                "src": "8195:54:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3647,
                                  "type": "uint160",
                                  "value": "sqrtRatioAX96"
                                },
                                "id": 3709,
                                "name": "Identifier",
                                "src": "8252:13:39"
                              }
                            ],
                            "id": 3710,
                            "name": "BinaryOperation",
                            "src": "8195:70:39"
                          }
                        ],
                        "id": 3711,
                        "name": "Conditional",
                        "src": "7987:278:39"
                      }
                    ],
                    "id": 3712,
                    "name": "Return",
                    "src": "7968:297:39"
                  }
                ],
                "id": 3713,
                "name": "Block",
                "src": "7675:597:39"
              }
            ],
            "id": 3714,
            "name": "FunctionDefinition",
            "src": "7493:779:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount1Delta",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the amount1 delta between two prices\n @dev Calculates liquidity * (sqrt(upper) - sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up, or down\n @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices"
                },
                "id": 3715,
                "name": "StructuredDocumentation",
                "src": "8278:444:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "overrides": null,
                      "scope": 3762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3716,
                        "name": "ElementaryTypeName",
                        "src": "8761:7:39"
                      }
                    ],
                    "id": 3717,
                    "name": "VariableDeclaration",
                    "src": "8761:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "overrides": null,
                      "scope": 3762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3718,
                        "name": "ElementaryTypeName",
                        "src": "8792:7:39"
                      }
                    ],
                    "id": 3719,
                    "name": "VariableDeclaration",
                    "src": "8792:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 3720,
                        "name": "ElementaryTypeName",
                        "src": "8823:7:39"
                      }
                    ],
                    "id": 3721,
                    "name": "VariableDeclaration",
                    "src": "8823:17:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "roundUp",
                      "overrides": null,
                      "scope": 3762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3722,
                        "name": "ElementaryTypeName",
                        "src": "8850:4:39"
                      }
                    ],
                    "id": 3723,
                    "name": "VariableDeclaration",
                    "src": "8850:12:39"
                  }
                ],
                "id": 3724,
                "name": "ParameterList",
                "src": "8751:117:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount1",
                      "overrides": null,
                      "scope": 3762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3725,
                        "name": "ElementaryTypeName",
                        "src": "8892:7:39"
                      }
                    ],
                    "id": 3726,
                    "name": "VariableDeclaration",
                    "src": "8892:15:39"
                  }
                ],
                "id": 3727,
                "name": "ParameterList",
                "src": "8891:17:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3717,
                              "type": "uint160",
                              "value": "sqrtRatioAX96"
                            },
                            "id": 3728,
                            "name": "Identifier",
                            "src": "8923:13:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3719,
                              "type": "uint160",
                              "value": "sqrtRatioBX96"
                            },
                            "id": 3729,
                            "name": "Identifier",
                            "src": "8939:13:39"
                          }
                        ],
                        "id": 3730,
                        "name": "BinaryOperation",
                        "src": "8923:29:39"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "tuple()"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3717,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 3731,
                                    "name": "Identifier",
                                    "src": "8955:13:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3719,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3732,
                                    "name": "Identifier",
                                    "src": "8970:13:39"
                                  }
                                ],
                                "id": 3733,
                                "name": "TupleExpression",
                                "src": "8954:30:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3719,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3734,
                                    "name": "Identifier",
                                    "src": "8988:13:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3717,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 3735,
                                    "name": "Identifier",
                                    "src": "9003:13:39"
                                  }
                                ],
                                "id": 3736,
                                "name": "TupleExpression",
                                "src": "8987:30:39"
                              }
                            ],
                            "id": 3737,
                            "name": "Assignment",
                            "src": "8954:63:39"
                          }
                        ],
                        "id": 3738,
                        "name": "ExpressionStatement",
                        "src": "8954:63:39"
                      }
                    ],
                    "id": 3739,
                    "name": "IfStatement",
                    "src": "8919:98:39"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3727
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3723,
                              "type": "bool",
                              "value": "roundUp"
                            },
                            "id": 3740,
                            "name": "Identifier",
                            "src": "9047:7:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDivRoundingUp",
                                  "referencedDeclaration": 2344,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2345,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 3741,
                                    "name": "Identifier",
                                    "src": "9073:8:39"
                                  }
                                ],
                                "id": 3742,
                                "name": "MemberAccess",
                                "src": "9073:25:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3721,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3743,
                                "name": "Identifier",
                                "src": "9099:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3719,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3744,
                                    "name": "Identifier",
                                    "src": "9110:13:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3717,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 3745,
                                    "name": "Identifier",
                                    "src": "9126:13:39"
                                  }
                                ],
                                "id": 3746,
                                "name": "BinaryOperation",
                                "src": "9110:29:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "Q96",
                                  "referencedDeclaration": 2171,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2172,
                                      "type": "type(library FixedPoint96)",
                                      "value": "FixedPoint96"
                                    },
                                    "id": 3747,
                                    "name": "Identifier",
                                    "src": "9141:12:39"
                                  }
                                ],
                                "id": 3748,
                                "name": "MemberAccess",
                                "src": "9141:16:39"
                              }
                            ],
                            "id": 3749,
                            "name": "FunctionCall",
                            "src": "9073:85:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDiv",
                                  "referencedDeclaration": 2301,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2345,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 3750,
                                    "name": "Identifier",
                                    "src": "9177:8:39"
                                  }
                                ],
                                "id": 3751,
                                "name": "MemberAccess",
                                "src": "9177:15:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3721,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 3752,
                                "name": "Identifier",
                                "src": "9193:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3719,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 3753,
                                    "name": "Identifier",
                                    "src": "9204:13:39"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3717,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 3754,
                                    "name": "Identifier",
                                    "src": "9220:13:39"
                                  }
                                ],
                                "id": 3755,
                                "name": "BinaryOperation",
                                "src": "9204:29:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "Q96",
                                  "referencedDeclaration": 2171,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2172,
                                      "type": "type(library FixedPoint96)",
                                      "value": "FixedPoint96"
                                    },
                                    "id": 3756,
                                    "name": "Identifier",
                                    "src": "9235:12:39"
                                  }
                                ],
                                "id": 3757,
                                "name": "MemberAccess",
                                "src": "9235:16:39"
                              }
                            ],
                            "id": 3758,
                            "name": "FunctionCall",
                            "src": "9177:75:39"
                          }
                        ],
                        "id": 3759,
                        "name": "Conditional",
                        "src": "9047:205:39"
                      }
                    ],
                    "id": 3760,
                    "name": "Return",
                    "src": "9028:224:39"
                  }
                ],
                "id": 3761,
                "name": "Block",
                "src": "8909:350:39"
              }
            ],
            "id": 3762,
            "name": "FunctionDefinition",
            "src": "8727:532:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount0Delta",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Helper that gets signed token0 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount0 delta\n @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices"
                },
                "id": 3763,
                "name": "StructuredDocumentation",
                "src": "9265:333:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "overrides": null,
                      "scope": 3804,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3764,
                        "name": "ElementaryTypeName",
                        "src": "9637:7:39"
                      }
                    ],
                    "id": 3765,
                    "name": "VariableDeclaration",
                    "src": "9637:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "overrides": null,
                      "scope": 3804,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3766,
                        "name": "ElementaryTypeName",
                        "src": "9668:7:39"
                      }
                    ],
                    "id": 3767,
                    "name": "VariableDeclaration",
                    "src": "9668:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3804,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int128",
                          "type": "int128"
                        },
                        "id": 3768,
                        "name": "ElementaryTypeName",
                        "src": "9699:6:39"
                      }
                    ],
                    "id": 3769,
                    "name": "VariableDeclaration",
                    "src": "9699:16:39"
                  }
                ],
                "id": 3770,
                "name": "ParameterList",
                "src": "9627:94:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount0",
                      "overrides": null,
                      "scope": 3804,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 3771,
                        "name": "ElementaryTypeName",
                        "src": "9745:6:39"
                      }
                    ],
                    "id": 3772,
                    "name": "VariableDeclaration",
                    "src": "9745:14:39"
                  }
                ],
                "id": 3773,
                "name": "ParameterList",
                "src": "9744:16:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3773
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "int256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int128",
                                "typeString": "int128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3769,
                                  "type": "int128",
                                  "value": "liquidity"
                                },
                                "id": 3774,
                                "name": "Identifier",
                                "src": "9790:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3775,
                                "name": "Literal",
                                "src": "9802:1:39"
                              }
                            ],
                            "id": 3776,
                            "name": "BinaryOperation",
                            "src": "9790:13:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "prefix": true,
                              "type": "int256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "int256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toInt256",
                                      "referencedDeclaration": 3330,
                                      "type": "function (uint256) pure returns (int256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                },
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                3714,
                                                3804
                                              ],
                                              "referencedDeclaration": 3714,
                                              "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                              "value": "getAmount0Delta"
                                            },
                                            "id": 3777,
                                            "name": "Identifier",
                                            "src": "9823:15:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3765,
                                              "type": "uint160",
                                              "value": "sqrtRatioAX96"
                                            },
                                            "id": 3778,
                                            "name": "Identifier",
                                            "src": "9839:13:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3767,
                                              "type": "uint160",
                                              "value": "sqrtRatioBX96"
                                            },
                                            "id": 3779,
                                            "name": "Identifier",
                                            "src": "9854:13:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint128",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_int128",
                                                      "typeString": "int128"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint128)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint128",
                                                      "type": null
                                                    },
                                                    "id": 3780,
                                                    "name": "ElementaryTypeName",
                                                    "src": "9869:7:39"
                                                  }
                                                ],
                                                "id": 3781,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "9869:7:39"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "-",
                                                  "prefix": true,
                                                  "type": "int128"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3769,
                                                      "type": "int128",
                                                      "value": "liquidity"
                                                    },
                                                    "id": 3782,
                                                    "name": "Identifier",
                                                    "src": "9878:9:39"
                                                  }
                                                ],
                                                "id": 3783,
                                                "name": "UnaryOperation",
                                                "src": "9877:10:39"
                                              }
                                            ],
                                            "id": 3784,
                                            "name": "FunctionCall",
                                            "src": "9869:19:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "66616c7365",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "bool",
                                              "type": "bool",
                                              "value": "false"
                                            },
                                            "id": 3785,
                                            "name": "Literal",
                                            "src": "9890:5:39"
                                          }
                                        ],
                                        "id": 3786,
                                        "name": "FunctionCall",
                                        "src": "9823:73:39"
                                      }
                                    ],
                                    "id": 3787,
                                    "name": "MemberAccess",
                                    "src": "9823:82:39"
                                  }
                                ],
                                "id": 3788,
                                "name": "FunctionCall",
                                "src": "9823:84:39"
                              }
                            ],
                            "id": 3789,
                            "name": "UnaryOperation",
                            "src": "9822:85:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "toInt256",
                                  "referencedDeclaration": 3330,
                                  "type": "function (uint256) pure returns (int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            3714,
                                            3804
                                          ],
                                          "referencedDeclaration": 3714,
                                          "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                          "value": "getAmount0Delta"
                                        },
                                        "id": 3790,
                                        "name": "Identifier",
                                        "src": "9926:15:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3765,
                                          "type": "uint160",
                                          "value": "sqrtRatioAX96"
                                        },
                                        "id": 3791,
                                        "name": "Identifier",
                                        "src": "9942:13:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3767,
                                          "type": "uint160",
                                          "value": "sqrtRatioBX96"
                                        },
                                        "id": 3792,
                                        "name": "Identifier",
                                        "src": "9957:13:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint128",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_int128",
                                                  "typeString": "int128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint128)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint128",
                                                  "type": null
                                                },
                                                "id": 3793,
                                                "name": "ElementaryTypeName",
                                                "src": "9972:7:39"
                                              }
                                            ],
                                            "id": 3794,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "9972:7:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3769,
                                              "type": "int128",
                                              "value": "liquidity"
                                            },
                                            "id": 3795,
                                            "name": "Identifier",
                                            "src": "9980:9:39"
                                          }
                                        ],
                                        "id": 3796,
                                        "name": "FunctionCall",
                                        "src": "9972:18:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "74727565",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "bool",
                                          "type": "bool",
                                          "value": "true"
                                        },
                                        "id": 3797,
                                        "name": "Literal",
                                        "src": "9992:4:39"
                                      }
                                    ],
                                    "id": 3798,
                                    "name": "FunctionCall",
                                    "src": "9926:71:39"
                                  }
                                ],
                                "id": 3799,
                                "name": "MemberAccess",
                                "src": "9926:80:39"
                              }
                            ],
                            "id": 3800,
                            "name": "FunctionCall",
                            "src": "9926:82:39"
                          }
                        ],
                        "id": 3801,
                        "name": "Conditional",
                        "src": "9790:218:39"
                      }
                    ],
                    "id": 3802,
                    "name": "Return",
                    "src": "9771:237:39"
                  }
                ],
                "id": 3803,
                "name": "Block",
                "src": "9761:254:39"
              }
            ],
            "id": 3804,
            "name": "FunctionDefinition",
            "src": "9603:412:39"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount1Delta",
              "overrides": null,
              "scope": 3847,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Helper that gets signed token1 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount1 delta\n @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices"
                },
                "id": 3805,
                "name": "StructuredDocumentation",
                "src": "10021:333:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "overrides": null,
                      "scope": 3846,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3806,
                        "name": "ElementaryTypeName",
                        "src": "10393:7:39"
                      }
                    ],
                    "id": 3807,
                    "name": "VariableDeclaration",
                    "src": "10393:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "overrides": null,
                      "scope": 3846,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 3808,
                        "name": "ElementaryTypeName",
                        "src": "10424:7:39"
                      }
                    ],
                    "id": 3809,
                    "name": "VariableDeclaration",
                    "src": "10424:21:39"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "overrides": null,
                      "scope": 3846,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int128",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int128",
                          "type": "int128"
                        },
                        "id": 3810,
                        "name": "ElementaryTypeName",
                        "src": "10455:6:39"
                      }
                    ],
                    "id": 3811,
                    "name": "VariableDeclaration",
                    "src": "10455:16:39"
                  }
                ],
                "id": 3812,
                "name": "ParameterList",
                "src": "10383:94:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount1",
                      "overrides": null,
                      "scope": 3846,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 3813,
                        "name": "ElementaryTypeName",
                        "src": "10501:6:39"
                      }
                    ],
                    "id": 3814,
                    "name": "VariableDeclaration",
                    "src": "10501:14:39"
                  }
                ],
                "id": 3815,
                "name": "ParameterList",
                "src": "10500:16:39"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3815
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "int256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int128",
                                "typeString": "int128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3811,
                                  "type": "int128",
                                  "value": "liquidity"
                                },
                                "id": 3816,
                                "name": "Identifier",
                                "src": "10546:9:39"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3817,
                                "name": "Literal",
                                "src": "10558:1:39"
                              }
                            ],
                            "id": 3818,
                            "name": "BinaryOperation",
                            "src": "10546:13:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "prefix": true,
                              "type": "int256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "int256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toInt256",
                                      "referencedDeclaration": 3330,
                                      "type": "function (uint256) pure returns (int256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                },
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                3762,
                                                3846
                                              ],
                                              "referencedDeclaration": 3762,
                                              "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                              "value": "getAmount1Delta"
                                            },
                                            "id": 3819,
                                            "name": "Identifier",
                                            "src": "10579:15:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3807,
                                              "type": "uint160",
                                              "value": "sqrtRatioAX96"
                                            },
                                            "id": 3820,
                                            "name": "Identifier",
                                            "src": "10595:13:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3809,
                                              "type": "uint160",
                                              "value": "sqrtRatioBX96"
                                            },
                                            "id": 3821,
                                            "name": "Identifier",
                                            "src": "10610:13:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint128",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_int128",
                                                      "typeString": "int128"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint128)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint128",
                                                      "type": null
                                                    },
                                                    "id": 3822,
                                                    "name": "ElementaryTypeName",
                                                    "src": "10625:7:39"
                                                  }
                                                ],
                                                "id": 3823,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "10625:7:39"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "-",
                                                  "prefix": true,
                                                  "type": "int128"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3811,
                                                      "type": "int128",
                                                      "value": "liquidity"
                                                    },
                                                    "id": 3824,
                                                    "name": "Identifier",
                                                    "src": "10634:9:39"
                                                  }
                                                ],
                                                "id": 3825,
                                                "name": "UnaryOperation",
                                                "src": "10633:10:39"
                                              }
                                            ],
                                            "id": 3826,
                                            "name": "FunctionCall",
                                            "src": "10625:19:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "66616c7365",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "bool",
                                              "type": "bool",
                                              "value": "false"
                                            },
                                            "id": 3827,
                                            "name": "Literal",
                                            "src": "10646:5:39"
                                          }
                                        ],
                                        "id": 3828,
                                        "name": "FunctionCall",
                                        "src": "10579:73:39"
                                      }
                                    ],
                                    "id": 3829,
                                    "name": "MemberAccess",
                                    "src": "10579:82:39"
                                  }
                                ],
                                "id": 3830,
                                "name": "FunctionCall",
                                "src": "10579:84:39"
                              }
                            ],
                            "id": 3831,
                            "name": "UnaryOperation",
                            "src": "10578:85:39"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "toInt256",
                                  "referencedDeclaration": 3330,
                                  "type": "function (uint256) pure returns (int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            3762,
                                            3846
                                          ],
                                          "referencedDeclaration": 3762,
                                          "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                          "value": "getAmount1Delta"
                                        },
                                        "id": 3832,
                                        "name": "Identifier",
                                        "src": "10682:15:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3807,
                                          "type": "uint160",
                                          "value": "sqrtRatioAX96"
                                        },
                                        "id": 3833,
                                        "name": "Identifier",
                                        "src": "10698:13:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3809,
                                          "type": "uint160",
                                          "value": "sqrtRatioBX96"
                                        },
                                        "id": 3834,
                                        "name": "Identifier",
                                        "src": "10713:13:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint128",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_int128",
                                                  "typeString": "int128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint128)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint128",
                                                  "type": null
                                                },
                                                "id": 3835,
                                                "name": "ElementaryTypeName",
                                                "src": "10728:7:39"
                                              }
                                            ],
                                            "id": 3836,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "10728:7:39"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3811,
                                              "type": "int128",
                                              "value": "liquidity"
                                            },
                                            "id": 3837,
                                            "name": "Identifier",
                                            "src": "10736:9:39"
                                          }
                                        ],
                                        "id": 3838,
                                        "name": "FunctionCall",
                                        "src": "10728:18:39"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "74727565",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "bool",
                                          "type": "bool",
                                          "value": "true"
                                        },
                                        "id": 3839,
                                        "name": "Literal",
                                        "src": "10748:4:39"
                                      }
                                    ],
                                    "id": 3840,
                                    "name": "FunctionCall",
                                    "src": "10682:71:39"
                                  }
                                ],
                                "id": 3841,
                                "name": "MemberAccess",
                                "src": "10682:80:39"
                              }
                            ],
                            "id": 3842,
                            "name": "FunctionCall",
                            "src": "10682:82:39"
                          }
                        ],
                        "id": 3843,
                        "name": "Conditional",
                        "src": "10546:218:39"
                      }
                    ],
                    "id": 3844,
                    "name": "Return",
                    "src": "10527:237:39"
                  }
                ],
                "id": 3845,
                "name": "Block",
                "src": "10517:254:39"
              }
            ],
            "id": 3846,
            "name": "FunctionDefinition",
            "src": "10359:412:39"
          }
        ],
        "id": 3847,
        "name": "ContractDefinition",
        "src": "369:10404:39"
      }
    ],
    "id": 3848,
    "name": "SourceUnit",
    "src": "37:10737:39"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.8+commit.0bbfe453.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-02-07T17:50:42.793Z",
  "devdoc": {
    "methods": {},
    "title": "Functions based on Q64.96 sqrt price and liquidity"
  },
  "userdoc": {
    "methods": {},
    "notice": "Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas"
  }
}