{
  "contractName": "FixedPoint",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@uniswap/lib/contracts/libraries/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000000},\"remappings\":[]},\"sources\":{\"@uniswap/lib/contracts/libraries/Babylonian.sol\":{\"keccak256\":\"0x2799682d733a6ef3aae1dce7dbe2cff5513f0244e4abd07338fe7a45c8fd9733\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://332968199300fe6025b9ad8f3d69f252ec2a3a092fa42a0ef7f2d1397f59a7e5\",\"dweb:/ipfs/Qme4wBzDwfHr7zHk8WrCwCpozpt4KHuDQSxfJTDoHL8Pdi\"]},\"@uniswap/lib/contracts/libraries/BitMath.sol\":{\"keccak256\":\"0x0ef2d7cd41b3f1818fa41019b38948489238efccebe428d4b04919174378abf5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://696ac37d8731506cbac9b428afb7bdfa35a490df139022be2b04ab3815113cf4\",\"dweb:/ipfs/QmUQ5ty49YATw4Gf5PrtFkxNErcnwhNUpRF3WFaVJxATf9\"]},\"@uniswap/lib/contracts/libraries/FixedPoint.sol\":{\"keccak256\":\"0x0e8d7f2bfad7505f9d029ea060eab9747363d50bf01f2d954bf719da6fac342f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://35dd605e2fd59d2606529ab1575cd937082018cd041cfbb843b68e97e440b9b0\",\"dweb:/ipfs/QmUHbzyCdzwUSCUPVFFm9N6oKXiisVdscX8H73nwNXmmpV\"]},\"@uniswap/lib/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0xf3dd7fc13a7eee86c17cdfe13b03a7f24ebaf09588550b64b581ae7b2bd59273\",\"license\":\"CC-BY-4.0\",\"urls\":[\"bzz-raw://492ced3afa929c790c9b1314b86454a977528e8f3d408a55b1275a396154d097\",\"dweb:/ipfs/QmbX2YAgtoM13Z2MRnV5WnUpzmw3fMxmhzCnsKKxQUjGJJ\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209a10e10cd2552f461b45a2d94fc7c624abd86af191070d1a5c4c2d9534c4619864736f6c634300060a0033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209a10e10cd2552f461b45a2d94fc7c624abd86af191070d1a5c4c2d9534c4619864736f6c634300060a0033",
  "immutableReferences": {},
  "sourceMap": "251:5329:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "251:5329:4:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity >=0.4.0;\n\nimport './FullMath.sol';\nimport './Babylonian.sol';\nimport './BitMath.sol';\n\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\nlibrary FixedPoint {\n    // range: [0, 2**112 - 1]\n    // resolution: 1 / 2**112\n    struct uq112x112 {\n        uint224 _x;\n    }\n\n    // range: [0, 2**144 - 1]\n    // resolution: 1 / 2**112\n    struct uq144x112 {\n        uint256 _x;\n    }\n\n    uint8 private constant RESOLUTION = 112;\n    uint256 private constant Q112 = 0x10000000000000000000000000000;\n    uint256 private constant Q224 = 0x100000000000000000000000000000000000000000000000000000000;\n    uint256 private constant LOWER_MASK = 0xffffffffffffffffffffffffffff; // decimal of UQ*x112 (lower 112 bits)\n\n    // encode a uint112 as a UQ112x112\n    function encode(uint112 x) internal pure returns (uq112x112 memory) {\n        return uq112x112(uint224(x) << RESOLUTION);\n    }\n\n    // encodes a uint144 as a UQ144x112\n    function encode144(uint144 x) internal pure returns (uq144x112 memory) {\n        return uq144x112(uint256(x) << RESOLUTION);\n    }\n\n    // decode a UQ112x112 into a uint112 by truncating after the radix point\n    function decode(uq112x112 memory self) internal pure returns (uint112) {\n        return uint112(self._x >> RESOLUTION);\n    }\n\n    // decode a UQ144x112 into a uint144 by truncating after the radix point\n    function decode144(uq144x112 memory self) internal pure returns (uint144) {\n        return uint144(self._x >> RESOLUTION);\n    }\n\n    // multiply a UQ112x112 by a uint, returning a UQ144x112\n    // reverts on overflow\n    function mul(uq112x112 memory self, uint256 y) internal pure returns (uq144x112 memory) {\n        uint256 z = 0;\n        require(y == 0 || (z = self._x * y) / y == self._x, 'FixedPoint: MUL_OVERFLOW');\n        return uq144x112(z);\n    }\n\n    // multiply a UQ112x112 by an int and decode, returning an int\n    // reverts on overflow\n    function muli(uq112x112 memory self, int256 y) internal pure returns (int256) {\n        uint256 z = FullMath.mulDiv(self._x, uint256(y < 0 ? -y : y), Q112);\n        require(z < 2**255, 'FixedPoint: MULI_OVERFLOW');\n        return y < 0 ? -int256(z) : int256(z);\n    }\n\n    // multiply a UQ112x112 by a UQ112x112, returning a UQ112x112\n    // lossy\n    function muluq(uq112x112 memory self, uq112x112 memory other) internal pure returns (uq112x112 memory) {\n        if (self._x == 0 || other._x == 0) {\n            return uq112x112(0);\n        }\n        uint112 upper_self = uint112(self._x >> RESOLUTION); // * 2^0\n        uint112 lower_self = uint112(self._x & LOWER_MASK); // * 2^-112\n        uint112 upper_other = uint112(other._x >> RESOLUTION); // * 2^0\n        uint112 lower_other = uint112(other._x & LOWER_MASK); // * 2^-112\n\n        // partial products\n        uint224 upper = uint224(upper_self) * upper_other; // * 2^0\n        uint224 lower = uint224(lower_self) * lower_other; // * 2^-224\n        uint224 uppers_lowero = uint224(upper_self) * lower_other; // * 2^-112\n        uint224 uppero_lowers = uint224(upper_other) * lower_self; // * 2^-112\n\n        // so the bit shift does not overflow\n        require(upper <= uint112(-1), 'FixedPoint: MULUQ_OVERFLOW_UPPER');\n\n        // this cannot exceed 256 bits, all values are 224 bits\n        uint256 sum = uint256(upper << RESOLUTION) + uppers_lowero + uppero_lowers + (lower >> RESOLUTION);\n\n        // so the cast does not overflow\n        require(sum <= uint224(-1), 'FixedPoint: MULUQ_OVERFLOW_SUM');\n\n        return uq112x112(uint224(sum));\n    }\n\n    // divide a UQ112x112 by a UQ112x112, returning a UQ112x112\n    function divuq(uq112x112 memory self, uq112x112 memory other) internal pure returns (uq112x112 memory) {\n        require(other._x > 0, 'FixedPoint: DIV_BY_ZERO_DIVUQ');\n        if (self._x == other._x) {\n            return uq112x112(uint224(Q112));\n        }\n        if (self._x <= uint144(-1)) {\n            uint256 value = (uint256(self._x) << RESOLUTION) / other._x;\n            require(value <= uint224(-1), 'FixedPoint: DIVUQ_OVERFLOW');\n            return uq112x112(uint224(value));\n        }\n\n        uint256 result = FullMath.mulDiv(Q112, self._x, other._x);\n        require(result <= uint224(-1), 'FixedPoint: DIVUQ_OVERFLOW');\n        return uq112x112(uint224(result));\n    }\n\n    // returns a UQ112x112 which represents the ratio of the numerator to the denominator\n    // lossy\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\n        require(denominator > 0, 'FixedPoint: DIV_BY_ZERO_FRACTION');\n        return uq112x112((uint224(numerator) << RESOLUTION) / denominator);\n    }\n\n    // take the reciprocal of a UQ112x112\n    // reverts on overflow\n    // lossy\n    function reciprocal(uq112x112 memory self) internal pure returns (uq112x112 memory) {\n        require(self._x > 1, 'FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW');\n        return uq112x112(uint224(Q224 / self._x));\n    }\n\n    // square root of a UQ112x112\n    // lossy between 0/1 and 40 bits\n    function sqrt(uq112x112 memory self) internal pure returns (uq112x112 memory) {\n        if (self._x <= uint144(-1)) {\n            return uq112x112(uint224(Babylonian.sqrt(uint256(self._x) << 112)));\n        }\n\n        uint8 safeShiftBits = 255 - BitMath.mostSignificantBit(self._x);\n        safeShiftBits -= safeShiftBits % 2;\n        return uq112x112(uint224(Babylonian.sqrt(uint256(self._x) << safeShiftBits) << ((112 - safeShiftBits) / 2)));\n    }\n}\n",
  "sourcePath": "@uniswap/lib/contracts/libraries/FixedPoint.sol",
  "ast": {
    "absolutePath": "@uniswap/lib/contracts/libraries/FixedPoint.sol",
    "exportedSymbols": {
      "FixedPoint": [
        1166
      ]
    },
    "id": 1167,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 608,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "45:24:4"
      },
      {
        "absolutePath": "@uniswap/lib/contracts/libraries/FullMath.sol",
        "file": "./FullMath.sol",
        "id": 609,
        "nodeType": "ImportDirective",
        "scope": 1167,
        "sourceUnit": 1380,
        "src": "71:24:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@uniswap/lib/contracts/libraries/Babylonian.sol",
        "file": "./Babylonian.sol",
        "id": 610,
        "nodeType": "ImportDirective",
        "scope": 1167,
        "sourceUnit": 490,
        "src": "96:26:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@uniswap/lib/contracts/libraries/BitMath.sol",
        "file": "./BitMath.sol",
        "id": 611,
        "nodeType": "ImportDirective",
        "scope": 1167,
        "sourceUnit": 607,
        "src": "123:23:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1166,
        "linearizedBaseContracts": [
          1166
        ],
        "name": "FixedPoint",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "FixedPoint.uq112x112",
            "id": 614,
            "members": [
              {
                "constant": false,
                "id": 613,
                "mutability": "mutable",
                "name": "_x",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 614,
                "src": "363:10:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint224",
                  "typeString": "uint224"
                },
                "typeName": {
                  "id": 612,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "363:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "uq112x112",
            "nodeType": "StructDefinition",
            "scope": 1166,
            "src": "336:44:4",
            "visibility": "public"
          },
          {
            "canonicalName": "FixedPoint.uq144x112",
            "id": 617,
            "members": [
              {
                "constant": false,
                "id": 616,
                "mutability": "mutable",
                "name": "_x",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 617,
                "src": "473:10:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 615,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "473:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "uq144x112",
            "nodeType": "StructDefinition",
            "scope": 1166,
            "src": "446:44:4",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 620,
            "mutability": "constant",
            "name": "RESOLUTION",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1166,
            "src": "496:39:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 618,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "496:5:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313132",
              "id": 619,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "532:3:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_112_by_1",
                "typeString": "int_const 112"
              },
              "value": "112"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 623,
            "mutability": "constant",
            "name": "Q112",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1166,
            "src": "541:63:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 621,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "541:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30783130303030303030303030303030303030303030303030303030303030",
              "id": 622,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "573:31:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1",
                "typeString": "int_const 5192...(26 digits omitted)...0096"
              },
              "value": "0x10000000000000000000000000000"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 626,
            "mutability": "constant",
            "name": "Q224",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1166,
            "src": "610:91:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 624,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "610:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030",
              "id": 625,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "642:59:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_26959946667150639794667015087019630673637144422540572481103610249216_by_1",
                "typeString": "int_const 2695...(60 digits omitted)...9216"
              },
              "value": "0x100000000000000000000000000000000000000000000000000000000"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 629,
            "mutability": "constant",
            "name": "LOWER_MASK",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1166,
            "src": "707:68:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 627,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "707:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307866666666666666666666666666666666666666666666666666666666",
              "id": 628,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "745:30:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5192296858534827628530496329220095_by_1",
                "typeString": "int_const 5192...(26 digits omitted)...0095"
              },
              "value": "0xffffffffffffffffffffffffffff"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 645,
              "nodeType": "Block",
              "src": "928:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 639,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 631,
                              "src": "963:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            ],
                            "id": 638,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "955:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": {
                              "id": 637,
                              "name": "uint224",
                              "nodeType": "ElementaryTypeName",
                              "src": "955:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "955:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 641,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 620,
                          "src": "969:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "955:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 636,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 614,
                      "src": "945:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "945:35:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 635,
                  "id": 644,
                  "nodeType": "Return",
                  "src": "938:42:4"
                }
              ]
            },
            "documentation": null,
            "id": 646,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encode",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 631,
                  "mutability": "mutable",
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 646,
                  "src": "876:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 630,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "876:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "875:11:4"
            },
            "returnParameters": {
              "id": 635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 634,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 646,
                  "src": "910:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 633,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "910:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "909:18:4"
            },
            "scope": 1166,
            "src": "860:127:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 662,
              "nodeType": "Block",
              "src": "1104:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 659,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 656,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 648,
                              "src": "1139:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint144",
                                "typeString": "uint144"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint144",
                                "typeString": "uint144"
                              }
                            ],
                            "id": 655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1131:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 654,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1131:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1131:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 658,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 620,
                          "src": "1145:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1131:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 653,
                      "name": "uq144x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 617,
                      "src": "1121:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq144x112_$617_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq144x112 storage pointer)"
                      }
                    },
                    "id": 660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1121:35:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$617_memory_ptr",
                      "typeString": "struct FixedPoint.uq144x112 memory"
                    }
                  },
                  "functionReturnParameters": 652,
                  "id": 661,
                  "nodeType": "Return",
                  "src": "1114:42:4"
                }
              ]
            },
            "documentation": null,
            "id": 663,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encode144",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 649,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 648,
                  "mutability": "mutable",
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 663,
                  "src": "1052:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint144",
                    "typeString": "uint144"
                  },
                  "typeName": {
                    "id": 647,
                    "name": "uint144",
                    "nodeType": "ElementaryTypeName",
                    "src": "1052:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1051:11:4"
            },
            "returnParameters": {
              "id": 652,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 651,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 663,
                  "src": "1086:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$617_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 650,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 617,
                    "src": "1086:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$617_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1085:18:4"
            },
            "scope": 1166,
            "src": "1033:130:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 678,
              "nodeType": "Block",
              "src": "1317:54:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 672,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 665,
                            "src": "1342:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 673,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "1342:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 674,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 620,
                          "src": "1353:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1342:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1334:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": {
                        "id": 670,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "1334:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1334:30:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "functionReturnParameters": 669,
                  "id": 677,
                  "nodeType": "Return",
                  "src": "1327:37:4"
                }
              ]
            },
            "documentation": null,
            "id": 679,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decode",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 665,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 679,
                  "src": "1262:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 664,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "1262:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1261:23:4"
            },
            "returnParameters": {
              "id": 669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 668,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 679,
                  "src": "1308:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 667,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "1308:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1307:9:4"
            },
            "scope": 1166,
            "src": "1246:125:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 694,
              "nodeType": "Block",
              "src": "1528:54:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 688,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 681,
                            "src": "1553:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq144x112_$617_memory_ptr",
                              "typeString": "struct FixedPoint.uq144x112 memory"
                            }
                          },
                          "id": 689,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 616,
                          "src": "1553:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 690,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 620,
                          "src": "1564:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1553:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1545:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint144_$",
                        "typeString": "type(uint144)"
                      },
                      "typeName": {
                        "id": 686,
                        "name": "uint144",
                        "nodeType": "ElementaryTypeName",
                        "src": "1545:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1545:30:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "functionReturnParameters": 685,
                  "id": 693,
                  "nodeType": "Return",
                  "src": "1538:37:4"
                }
              ]
            },
            "documentation": null,
            "id": 695,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decode144",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 681,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 695,
                  "src": "1473:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$617_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 680,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 617,
                    "src": "1473:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$617_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1472:23:4"
            },
            "returnParameters": {
              "id": 685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 684,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 695,
                  "src": "1519:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint144",
                    "typeString": "uint144"
                  },
                  "typeName": {
                    "id": 683,
                    "name": "uint144",
                    "nodeType": "ElementaryTypeName",
                    "src": "1519:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1518:9:4"
            },
            "scope": 1166,
            "src": "1454:128:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 732,
              "nodeType": "Block",
              "src": "1764:148:4",
              "statements": [
                {
                  "assignments": [
                    705
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 705,
                      "mutability": "mutable",
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 732,
                      "src": "1774:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 704,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1774:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 707,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1786:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1774:13:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 709,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 699,
                            "src": "1805:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1810:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1805:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 720,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 717,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 712,
                                    "name": "z",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 705,
                                    "src": "1816:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 716,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 713,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 697,
                                        "src": "1820:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                          "typeString": "struct FixedPoint.uq112x112 memory"
                                        }
                                      },
                                      "id": 714,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "_x",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 613,
                                      "src": "1820:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 715,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 699,
                                      "src": "1830:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1820:11:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1816:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 718,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1815:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 719,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 699,
                              "src": "1835:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1815:21:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 721,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 697,
                              "src": "1840:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                "typeString": "struct FixedPoint.uq112x112 memory"
                              }
                            },
                            "id": 722,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_x",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 613,
                            "src": "1840:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "1815:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1805:42:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c5f4f564552464c4f57",
                        "id": 725,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1849:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                          "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                        },
                        "value": "FixedPoint: MUL_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                          "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                        }
                      ],
                      "id": 708,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1797:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1797:79:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 727,
                  "nodeType": "ExpressionStatement",
                  "src": "1797:79:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 729,
                        "name": "z",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 705,
                        "src": "1903:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 728,
                      "name": "uq144x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 617,
                      "src": "1893:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq144x112_$617_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq144x112 storage pointer)"
                      }
                    },
                    "id": 730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1893:12:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$617_memory_ptr",
                      "typeString": "struct FixedPoint.uq144x112 memory"
                    }
                  },
                  "functionReturnParameters": 703,
                  "id": 731,
                  "nodeType": "Return",
                  "src": "1886:19:4"
                }
              ]
            },
            "documentation": null,
            "id": 733,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 697,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 733,
                  "src": "1689:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 696,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "1689:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 699,
                  "mutability": "mutable",
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 733,
                  "src": "1712:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1712:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1688:34:4"
            },
            "returnParameters": {
              "id": 703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 702,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 733,
                  "src": "1746:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$617_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 701,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 617,
                    "src": "1746:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$617_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1745:18:4"
            },
            "scope": 1166,
            "src": "1676:236:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 784,
              "nodeType": "Block",
              "src": "2090:189:4",
              "statements": [
                {
                  "assignments": [
                    743
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 743,
                      "mutability": "mutable",
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 784,
                      "src": "2100:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 742,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2100:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 760,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 746,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 735,
                          "src": "2128:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 747,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 613,
                        "src": "2128:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 750,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 737,
                                "src": "2145:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 751,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2149:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2145:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "id": 755,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 737,
                              "src": "2158:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 756,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "2145:14:4",
                            "trueExpression": {
                              "argumentTypes": null,
                              "id": 754,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "2153:2:4",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 753,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 737,
                                "src": "2154:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          ],
                          "id": 749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2137:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 748,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2137:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2137:23:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 758,
                        "name": "Q112",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 623,
                        "src": "2162:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 744,
                        "name": "FullMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1379,
                        "src": "2112:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FullMath_$1379_$",
                          "typeString": "type(library FullMath)"
                        }
                      },
                      "id": 745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1378,
                      "src": "2112:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2112:55:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2100:67:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 762,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 743,
                          "src": "2185:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...9968"
                          },
                          "id": 765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2189:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "**",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "323535",
                            "id": 764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2192:3:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_255_by_1",
                              "typeString": "int_const 255"
                            },
                            "value": "255"
                          },
                          "src": "2189:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...9968"
                          }
                        },
                        "src": "2185:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c495f4f564552464c4f57",
                        "id": 767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2197:27:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_914c90235670df1ae5bf52334659fe1406f845f46800f1d0de0a5462ab169feb",
                          "typeString": "literal_string \"FixedPoint: MULI_OVERFLOW\""
                        },
                        "value": "FixedPoint: MULI_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_914c90235670df1ae5bf52334659fe1406f845f46800f1d0de0a5462ab169feb",
                          "typeString": "literal_string \"FixedPoint: MULI_OVERFLOW\""
                        }
                      ],
                      "id": 761,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2177:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2177:48:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 769,
                  "nodeType": "ExpressionStatement",
                  "src": "2177:48:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 770,
                        "name": "y",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "2242:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2246:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2242:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 780,
                          "name": "z",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 743,
                          "src": "2270:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2263:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 778,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2263:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2263:9:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2242:30:4",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "2250:10:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 775,
                            "name": "z",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 743,
                            "src": "2258:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2251:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": {
                            "id": 773,
                            "name": "int256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2251:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2251:9:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 741,
                  "id": 783,
                  "nodeType": "Return",
                  "src": "2235:37:4"
                }
              ]
            },
            "documentation": null,
            "id": 785,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "muli",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 735,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 785,
                  "src": "2026:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 734,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "2026:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 737,
                  "mutability": "mutable",
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 785,
                  "src": "2049:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 736,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2049:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2025:33:4"
            },
            "returnParameters": {
              "id": 741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 740,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 785,
                  "src": "2082:6:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 739,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2082:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2081:8:4"
            },
            "scope": 1166,
            "src": "2012:267:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 932,
              "nodeType": "Block",
              "src": "2467:1158:4",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "id": 797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 794,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 787,
                          "src": "2481:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 795,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 613,
                        "src": "2481:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 796,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2492:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2481:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "id": 801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 798,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 789,
                          "src": "2497:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 799,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 613,
                        "src": "2497:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2509:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2497:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2481:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 808,
                  "nodeType": "IfStatement",
                  "src": "2477:79:4",
                  "trueBody": {
                    "id": 807,
                    "nodeType": "Block",
                    "src": "2512:44:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2543:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 803,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 614,
                            "src": "2533:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2533:12:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 793,
                        "id": 806,
                        "nodeType": "Return",
                        "src": "2526:19:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    810
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 810,
                      "mutability": "mutable",
                      "name": "upper_self",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "2565:18:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 809,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2565:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 818,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 813,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "2594:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 814,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "2594:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 815,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 620,
                          "src": "2605:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "2594:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2586:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": {
                        "id": 811,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2586:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2586:30:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2565:51:4"
                },
                {
                  "assignments": [
                    820
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 820,
                      "mutability": "mutable",
                      "name": "lower_self",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "2635:18:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 819,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2635:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 828,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 823,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 787,
                            "src": "2664:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 824,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "2664:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 825,
                          "name": "LOWER_MASK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 629,
                          "src": "2674:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2664:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2656:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": {
                        "id": 821,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2656:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2656:29:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2635:50:4"
                },
                {
                  "assignments": [
                    830
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 830,
                      "mutability": "mutable",
                      "name": "upper_other",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "2707:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 829,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2707:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 838,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 833,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "2737:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 834,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "2737:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 620,
                          "src": "2749:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "2737:22:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2729:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": {
                        "id": 831,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2729:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2729:31:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2707:53:4"
                },
                {
                  "assignments": [
                    840
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 840,
                      "mutability": "mutable",
                      "name": "lower_other",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "2779:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 839,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2779:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 848,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 846,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 843,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "2809:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 844,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "2809:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 845,
                          "name": "LOWER_MASK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 629,
                          "src": "2820:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2809:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 842,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2801:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": {
                        "id": 841,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2801:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2801:30:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2779:52:4"
                },
                {
                  "assignments": [
                    850
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 850,
                      "mutability": "mutable",
                      "name": "upper",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "2882:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 849,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2882:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 857,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 853,
                          "name": "upper_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 810,
                          "src": "2906:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 852,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2898:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": {
                          "id": 851,
                          "name": "uint224",
                          "nodeType": "ElementaryTypeName",
                          "src": "2898:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 854,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2898:19:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 855,
                      "name": "upper_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 830,
                      "src": "2920:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2898:33:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2882:49:4"
                },
                {
                  "assignments": [
                    859
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 859,
                      "mutability": "mutable",
                      "name": "lower",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "2950:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 858,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2950:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 866,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 862,
                          "name": "lower_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 820,
                          "src": "2974:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2966:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": {
                          "id": 860,
                          "name": "uint224",
                          "nodeType": "ElementaryTypeName",
                          "src": "2966:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2966:19:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 864,
                      "name": "lower_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 840,
                      "src": "2988:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2966:33:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2950:49:4"
                },
                {
                  "assignments": [
                    868
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 868,
                      "mutability": "mutable",
                      "name": "uppers_lowero",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "3021:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 867,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "3021:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 875,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 871,
                          "name": "upper_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 810,
                          "src": "3053:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3045:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": {
                          "id": 869,
                          "name": "uint224",
                          "nodeType": "ElementaryTypeName",
                          "src": "3045:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 872,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3045:19:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 873,
                      "name": "lower_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 840,
                      "src": "3067:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "3045:33:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3021:57:4"
                },
                {
                  "assignments": [
                    877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 877,
                      "mutability": "mutable",
                      "name": "uppero_lowers",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "3100:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 876,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "3100:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 884,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 880,
                          "name": "upper_other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 830,
                          "src": "3132:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3124:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": {
                          "id": 878,
                          "name": "uint224",
                          "nodeType": "ElementaryTypeName",
                          "src": "3124:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3124:20:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 882,
                      "name": "lower_self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 820,
                      "src": "3147:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "3124:33:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3100:57:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 886,
                          "name": "upper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 850,
                          "src": "3234:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "3251:2:4",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 889,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3252:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3243:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint112_$",
                              "typeString": "type(uint112)"
                            },
                            "typeName": {
                              "id": 887,
                              "name": "uint112",
                              "nodeType": "ElementaryTypeName",
                              "src": "3243:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3243:11:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "src": "3234:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f5550504552",
                        "id": 893,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3256:34:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                        },
                        "value": "FixedPoint: MULUQ_OVERFLOW_UPPER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                        }
                      ],
                      "id": 885,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3226:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3226:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 895,
                  "nodeType": "ExpressionStatement",
                  "src": "3226:65:4"
                },
                {
                  "assignments": [
                    897
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 897,
                      "mutability": "mutable",
                      "name": "sum",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 932,
                      "src": "3366:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 896,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3366:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 913,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 907,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 905,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "id": 902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 900,
                                "name": "upper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 850,
                                "src": "3388:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 901,
                                "name": "RESOLUTION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "3397:10:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "3388:19:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3380:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 898,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3380:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 903,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3380:28:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 904,
                          "name": "uppers_lowero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 868,
                          "src": "3411:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "3380:44:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 906,
                        "name": "uppero_lowers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 877,
                        "src": "3427:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "src": "3380:60:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "id": 910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 908,
                            "name": "lower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 859,
                            "src": "3444:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 909,
                            "name": "RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 620,
                            "src": "3453:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "3444:19:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        }
                      ],
                      "id": 911,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3443:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "3380:84:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3366:98:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 915,
                          "name": "sum",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 897,
                          "src": "3524:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "3539:2:4",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 918,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3540:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3531:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": {
                              "id": 916,
                              "name": "uint224",
                              "nodeType": "ElementaryTypeName",
                              "src": "3531:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 920,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3531:11:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "3524:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f53554d",
                        "id": 922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3544:32:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                        },
                        "value": "FixedPoint: MULUQ_OVERFLOW_SUM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                        }
                      ],
                      "id": 914,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3516:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3516:61:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 924,
                  "nodeType": "ExpressionStatement",
                  "src": "3516:61:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 928,
                            "name": "sum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 897,
                            "src": "3613:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3605:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": {
                            "id": 926,
                            "name": "uint224",
                            "nodeType": "ElementaryTypeName",
                            "src": "3605:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3605:12:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 925,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 614,
                      "src": "3595:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3595:23:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 793,
                  "id": 931,
                  "nodeType": "Return",
                  "src": "3588:30:4"
                }
              ]
            },
            "documentation": null,
            "id": 933,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "muluq",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 787,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 933,
                  "src": "2379:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 786,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "2379:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 789,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 933,
                  "src": "2402:22:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 788,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "2402:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2378:47:4"
            },
            "returnParameters": {
              "id": 793,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 792,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 933,
                  "src": "2449:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 791,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "2449:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2448:18:4"
            },
            "scope": 1166,
            "src": "2364:1261:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1035,
              "nodeType": "Block",
              "src": "3798:582:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 943,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 937,
                            "src": "3816:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 944,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "3816:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3827:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3816:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f4449565551",
                        "id": 947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3830:31:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_DIVUQ"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                        }
                      ],
                      "id": 942,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3808:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3808:54:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 949,
                  "nodeType": "ExpressionStatement",
                  "src": "3808:54:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 950,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 935,
                        "src": "3876:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 951,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 613,
                      "src": "3876:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 952,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 937,
                        "src": "3887:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 953,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 613,
                      "src": "3887:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "3876:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 963,
                  "nodeType": "IfStatement",
                  "src": "3872:81:4",
                  "trueBody": {
                    "id": 962,
                    "nodeType": "Block",
                    "src": "3897:56:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 958,
                                  "name": "Q112",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 623,
                                  "src": "3936:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 957,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3928:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": {
                                  "id": 956,
                                  "name": "uint224",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3928:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3928:13:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 955,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 614,
                            "src": "3918:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 960,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3918:24:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 941,
                        "id": 961,
                        "nodeType": "Return",
                        "src": "3911:31:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 964,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 935,
                        "src": "3966:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 965,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 613,
                      "src": "3966:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "3985:2:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 968,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3986:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3977:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint144_$",
                          "typeString": "type(uint144)"
                        },
                        "typeName": {
                          "id": 966,
                          "name": "uint144",
                          "nodeType": "ElementaryTypeName",
                          "src": "3977:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 970,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3977:11:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      }
                    },
                    "src": "3966:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1005,
                  "nodeType": "IfStatement",
                  "src": "3962:231:4",
                  "trueBody": {
                    "id": 1004,
                    "nodeType": "Block",
                    "src": "3990:203:4",
                    "statements": [
                      {
                        "assignments": [
                          973
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 973,
                            "mutability": "mutable",
                            "name": "value",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1004,
                            "src": "4004:13:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 972,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4004:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 985,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 980,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 976,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 935,
                                        "src": "4029:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                          "typeString": "struct FixedPoint.uq112x112 memory"
                                        }
                                      },
                                      "id": 977,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "_x",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 613,
                                      "src": "4029:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    ],
                                    "id": 975,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4021:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 974,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4021:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 978,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4021:16:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 979,
                                  "name": "RESOLUTION",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 620,
                                  "src": "4041:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "4021:30:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 981,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4020:32:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 982,
                              "name": "other",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 937,
                              "src": "4055:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                "typeString": "struct FixedPoint.uq112x112 memory"
                              }
                            },
                            "id": 983,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_x",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 613,
                            "src": "4055:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "4020:43:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4004:59:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 987,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 973,
                                "src": "4085:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 991,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "4102:2:4",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 990,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4103:1:4",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 989,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4094:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": {
                                    "id": 988,
                                    "name": "uint224",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4094:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 992,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4094:11:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "src": "4085:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                              "id": 994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4107:28:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                              },
                              "value": "FixedPoint: DIVUQ_OVERFLOW"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                              }
                            ],
                            "id": 986,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4077:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4077:59:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 996,
                        "nodeType": "ExpressionStatement",
                        "src": "4077:59:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1000,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 973,
                                  "src": "4175:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 999,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4167:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": {
                                  "id": 998,
                                  "name": "uint224",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4167:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4167:14:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 997,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 614,
                            "src": "4157:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 1002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4157:25:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 941,
                        "id": 1003,
                        "nodeType": "Return",
                        "src": "4150:32:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1007
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1007,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1035,
                      "src": "4203:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1006,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4203:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1010,
                        "name": "Q112",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 623,
                        "src": "4236:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1011,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 935,
                          "src": "4242:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 1012,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 613,
                        "src": "4242:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1013,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 937,
                          "src": "4251:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 1014,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 613,
                        "src": "4251:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1008,
                        "name": "FullMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1379,
                        "src": "4220:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FullMath_$1379_$",
                          "typeString": "type(library FullMath)"
                        }
                      },
                      "id": 1009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1378,
                      "src": "4220:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4220:40:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4203:57:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1024,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1018,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1007,
                          "src": "4278:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1022,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "4296:2:4",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 1021,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4297:1:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 1020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4288:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": {
                              "id": 1019,
                              "name": "uint224",
                              "nodeType": "ElementaryTypeName",
                              "src": "4288:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 1023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4288:11:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "4278:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                        "id": 1025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4301:28:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                        },
                        "value": "FixedPoint: DIVUQ_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                        }
                      ],
                      "id": 1017,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4270:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4270:60:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1027,
                  "nodeType": "ExpressionStatement",
                  "src": "4270:60:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1031,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1007,
                            "src": "4365:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4357:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": {
                            "id": 1029,
                            "name": "uint224",
                            "nodeType": "ElementaryTypeName",
                            "src": "4357:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4357:15:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 1028,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 614,
                      "src": "4347:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 1033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4347:26:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 941,
                  "id": 1034,
                  "nodeType": "Return",
                  "src": "4340:33:4"
                }
              ]
            },
            "documentation": null,
            "id": 1036,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divuq",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 935,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1036,
                  "src": "3710:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 934,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "3710:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 937,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1036,
                  "src": "3733:22:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 936,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "3733:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3709:47:4"
            },
            "returnParameters": {
              "id": 941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 940,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1036,
                  "src": "3780:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 939,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "3780:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3779:18:4"
            },
            "scope": 1166,
            "src": "3695:685:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1064,
              "nodeType": "Block",
              "src": "4588:153:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "id": 1048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1046,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1040,
                          "src": "4606:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1047,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4620:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4606:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f4652414354494f4e",
                        "id": 1049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4623:34:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_FRACTION"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                        }
                      ],
                      "id": 1045,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4598:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4598:60:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1051,
                  "nodeType": "ExpressionStatement",
                  "src": "4598:60:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 1061,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "id": 1058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1055,
                                    "name": "numerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1038,
                                    "src": "4694:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "id": 1054,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4686:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": {
                                    "id": 1053,
                                    "name": "uint224",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4686:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4686:18:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1057,
                                "name": "RESOLUTION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 620,
                                "src": "4708:10:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "4686:32:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "id": 1059,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4685:34:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1060,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1040,
                          "src": "4722:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "src": "4685:48:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 1052,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 614,
                      "src": "4675:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 1062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4675:59:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 1044,
                  "id": 1063,
                  "nodeType": "Return",
                  "src": "4668:66:4"
                }
              ]
            },
            "documentation": null,
            "id": 1065,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fraction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1041,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1038,
                  "mutability": "mutable",
                  "name": "numerator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1065,
                  "src": "4507:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 1037,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "4507:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1040,
                  "mutability": "mutable",
                  "name": "denominator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1065,
                  "src": "4526:19:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 1039,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "4526:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4506:40:4"
            },
            "returnParameters": {
              "id": 1044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1043,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1065,
                  "src": "4570:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1042,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "4570:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4569:18:4"
            },
            "scope": 1166,
            "src": "4489:252:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1090,
              "nodeType": "Block",
              "src": "4913:138:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 1076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1073,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1067,
                            "src": "4931:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 1074,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "4931:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 1075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4941:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "4931:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f5245434950524f43414c5f4f525f4f564552464c4f57",
                        "id": 1077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4944:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                        }
                      ],
                      "id": 1072,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4923:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4923:70:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1079,
                  "nodeType": "ExpressionStatement",
                  "src": "4923:70:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1083,
                              "name": "Q224",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 626,
                              "src": "5028:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1084,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1067,
                                "src": "5035:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                  "typeString": "struct FixedPoint.uq112x112 memory"
                                }
                              },
                              "id": 1085,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_x",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 613,
                              "src": "5035:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            },
                            "src": "5028:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5020:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": {
                            "id": 1081,
                            "name": "uint224",
                            "nodeType": "ElementaryTypeName",
                            "src": "5020:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1087,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5020:23:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 1080,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 614,
                      "src": "5010:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 1088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5010:34:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 1071,
                  "id": 1089,
                  "nodeType": "Return",
                  "src": "5003:41:4"
                }
              ]
            },
            "documentation": null,
            "id": 1091,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reciprocal",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1067,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1091,
                  "src": "4849:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1066,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "4849:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4848:23:4"
            },
            "returnParameters": {
              "id": 1071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1070,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1091,
                  "src": "4895:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1069,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "4895:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4894:18:4"
            },
            "scope": 1166,
            "src": "4829:222:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1164,
              "nodeType": "Block",
              "src": "5206:372:4",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 1105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1098,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1093,
                        "src": "5220:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 1099,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 613,
                      "src": "5220:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "5239:2:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1102,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5240:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 1101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5231:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint144_$",
                          "typeString": "type(uint144)"
                        },
                        "typeName": {
                          "id": 1100,
                          "name": "uint144",
                          "nodeType": "ElementaryTypeName",
                          "src": "5231:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5231:11:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      }
                    },
                    "src": "5220:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1123,
                  "nodeType": "IfStatement",
                  "src": "5216:120:4",
                  "trueBody": {
                    "id": 1122,
                    "nodeType": "Block",
                    "src": "5244:92:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1117,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1113,
                                              "name": "self",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1093,
                                              "src": "5307:4:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                                "typeString": "struct FixedPoint.uq112x112 memory"
                                              }
                                            },
                                            "id": 1114,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "_x",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 613,
                                            "src": "5307:7:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint224",
                                              "typeString": "uint224"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint224",
                                              "typeString": "uint224"
                                            }
                                          ],
                                          "id": 1112,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "5299:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 1111,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5299:7:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 1115,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5299:16:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "313132",
                                        "id": 1116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5319:3:4",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_112_by_1",
                                          "typeString": "int_const 112"
                                        },
                                        "value": "112"
                                      },
                                      "src": "5299:23:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1109,
                                      "name": "Babylonian",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 489,
                                      "src": "5283:10:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Babylonian_$489_$",
                                        "typeString": "type(library Babylonian)"
                                      }
                                    },
                                    "id": 1110,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sqrt",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 488,
                                    "src": "5283:15:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1118,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5283:40:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1108,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5275:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": {
                                  "id": 1107,
                                  "name": "uint224",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5275:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1119,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5275:49:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 1106,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 614,
                            "src": "5265:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 1120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5265:60:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 1097,
                        "id": 1121,
                        "nodeType": "Return",
                        "src": "5258:67:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1125
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1125,
                      "mutability": "mutable",
                      "name": "safeShiftBits",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1164,
                      "src": "5346:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 1124,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "5346:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1133,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 1132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "323535",
                      "id": 1126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5368:3:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1129,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1093,
                            "src": "5401:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 1130,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 613,
                          "src": "5401:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1127,
                          "name": "BitMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 606,
                          "src": "5374:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_BitMath_$606_$",
                            "typeString": "type(library BitMath)"
                          }
                        },
                        "id": 1128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mostSignificantBit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 605,
                        "src": "5374:26:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint8_$",
                          "typeString": "function (uint256) pure returns (uint8)"
                        }
                      },
                      "id": 1131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5374:35:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "5368:41:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5346:63:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1134,
                      "name": "safeShiftBits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1125,
                      "src": "5419:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 1137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1135,
                        "name": "safeShiftBits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1125,
                        "src": "5436:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "%",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1136,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5452:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "src": "5436:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "5419:34:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 1139,
                  "nodeType": "ExpressionStatement",
                  "src": "5419:34:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1151,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1147,
                                          "name": "self",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1093,
                                          "src": "5512:4:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                                            "typeString": "struct FixedPoint.uq112x112 memory"
                                          }
                                        },
                                        "id": 1148,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "_x",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 613,
                                        "src": "5512:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      ],
                                      "id": 1146,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5504:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 1145,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5504:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 1149,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5504:16:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1150,
                                    "name": "safeShiftBits",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1125,
                                    "src": "5524:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "src": "5504:33:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1143,
                                  "name": "Babylonian",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 489,
                                  "src": "5488:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Babylonian_$489_$",
                                    "typeString": "type(library Babylonian)"
                                  }
                                },
                                "id": 1144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 488,
                                "src": "5488:15:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 1152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5488:50:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 1158,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        "id": 1155,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "313132",
                                          "id": 1153,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5544:3:4",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_112_by_1",
                                            "typeString": "int_const 112"
                                          },
                                          "value": "112"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 1154,
                                          "name": "safeShiftBits",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1125,
                                          "src": "5550:13:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "src": "5544:19:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      }
                                    ],
                                    "id": 1156,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "5543:21:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 1157,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5567:1:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "5543:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "id": 1159,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5542:27:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "5488:81:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5480:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": {
                            "id": 1141,
                            "name": "uint224",
                            "nodeType": "ElementaryTypeName",
                            "src": "5480:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 1161,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5480:90:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 1140,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 614,
                      "src": "5470:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$614_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 1162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5470:101:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 1097,
                  "id": 1163,
                  "nodeType": "Return",
                  "src": "5463:108:4"
                }
              ]
            },
            "documentation": null,
            "id": 1165,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sqrt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1094,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1093,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1165,
                  "src": "5142:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1092,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "5142:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5141:23:4"
            },
            "returnParameters": {
              "id": 1097,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1096,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1165,
                  "src": "5188:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$614_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1095,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 614,
                    "src": "5188:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$614_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5187:18:4"
            },
            "scope": 1166,
            "src": "5128:450:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1167,
        "src": "251:5329:4"
      }
    ],
    "src": "45:5536:4"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@uniswap/lib/contracts/libraries/FixedPoint.sol",
      "exportedSymbols": {
        "FixedPoint": [
          1166
        ]
      },
      "license": "GPL-3.0-or-later"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.4",
            ".0"
          ]
        },
        "id": 608,
        "name": "PragmaDirective",
        "src": "45:24:4"
      },
      {
        "attributes": {
          "SourceUnit": 1380,
          "absolutePath": "@uniswap/lib/contracts/libraries/FullMath.sol",
          "file": "./FullMath.sol",
          "scope": 1167,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 609,
        "name": "ImportDirective",
        "src": "71:24:4"
      },
      {
        "attributes": {
          "SourceUnit": 490,
          "absolutePath": "@uniswap/lib/contracts/libraries/Babylonian.sol",
          "file": "./Babylonian.sol",
          "scope": 1167,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 610,
        "name": "ImportDirective",
        "src": "96:26:4"
      },
      {
        "attributes": {
          "SourceUnit": 607,
          "absolutePath": "@uniswap/lib/contracts/libraries/BitMath.sol",
          "file": "./BitMath.sol",
          "scope": 1167,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 611,
        "name": "ImportDirective",
        "src": "123:23:4"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            1166
          ],
          "name": "FixedPoint",
          "scope": 1167
        },
        "children": [
          {
            "attributes": {
              "canonicalName": "FixedPoint.uq112x112",
              "name": "uq112x112",
              "scope": 1166,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "_x",
                  "overrides": null,
                  "scope": 614,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint224",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint224",
                      "type": "uint224"
                    },
                    "id": 612,
                    "name": "ElementaryTypeName",
                    "src": "363:7:4"
                  }
                ],
                "id": 613,
                "name": "VariableDeclaration",
                "src": "363:10:4"
              }
            ],
            "id": 614,
            "name": "StructDefinition",
            "src": "336:44:4"
          },
          {
            "attributes": {
              "canonicalName": "FixedPoint.uq144x112",
              "name": "uq144x112",
              "scope": 1166,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "_x",
                  "overrides": null,
                  "scope": 617,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 615,
                    "name": "ElementaryTypeName",
                    "src": "473:7:4"
                  }
                ],
                "id": 616,
                "name": "VariableDeclaration",
                "src": "473:10:4"
              }
            ],
            "id": 617,
            "name": "StructDefinition",
            "src": "446:44:4"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "RESOLUTION",
              "overrides": null,
              "scope": 1166,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 618,
                "name": "ElementaryTypeName",
                "src": "496:5:4"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "313132",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 112",
                  "value": "112"
                },
                "id": 619,
                "name": "Literal",
                "src": "532:3:4"
              }
            ],
            "id": 620,
            "name": "VariableDeclaration",
            "src": "496:39:4"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "Q112",
              "overrides": null,
              "scope": 1166,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 621,
                "name": "ElementaryTypeName",
                "src": "541:7:4"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "30783130303030303030303030303030303030303030303030303030303030",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 5192...(26 digits omitted)...0096",
                  "value": "0x10000000000000000000000000000"
                },
                "id": 622,
                "name": "Literal",
                "src": "573:31:4"
              }
            ],
            "id": 623,
            "name": "VariableDeclaration",
            "src": "541:63:4"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "Q224",
              "overrides": null,
              "scope": 1166,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 624,
                "name": "ElementaryTypeName",
                "src": "610:7:4"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "3078313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 2695...(60 digits omitted)...9216",
                  "value": "0x100000000000000000000000000000000000000000000000000000000"
                },
                "id": 625,
                "name": "Literal",
                "src": "642:59:4"
              }
            ],
            "id": 626,
            "name": "VariableDeclaration",
            "src": "610:91:4"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "LOWER_MASK",
              "overrides": null,
              "scope": 1166,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 627,
                "name": "ElementaryTypeName",
                "src": "707:7:4"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "307866666666666666666666666666666666666666666666666666666666",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 5192...(26 digits omitted)...0095",
                  "value": "0xffffffffffffffffffffffffffff"
                },
                "id": 628,
                "name": "Literal",
                "src": "745:30:4"
              }
            ],
            "id": 629,
            "name": "VariableDeclaration",
            "src": "707:68:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "encode",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "x",
                      "overrides": null,
                      "scope": 646,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint112",
                          "type": "uint112"
                        },
                        "id": 630,
                        "name": "ElementaryTypeName",
                        "src": "876:7:4"
                      }
                    ],
                    "id": 631,
                    "name": "VariableDeclaration",
                    "src": "876:9:4"
                  }
                ],
                "id": 632,
                "name": "ParameterList",
                "src": "875:11:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 646,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 633,
                        "name": "UserDefinedTypeName",
                        "src": "910:9:4"
                      }
                    ],
                    "id": 634,
                    "name": "VariableDeclaration",
                    "src": "910:16:4"
                  }
                ],
                "id": 635,
                "name": "ParameterList",
                "src": "909:18:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 635
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq112x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 614,
                              "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                              "value": "uq112x112"
                            },
                            "id": 636,
                            "name": "Identifier",
                            "src": "945:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<<",
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint224",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint112",
                                          "typeString": "uint112"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint224)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint224",
                                          "type": null
                                        },
                                        "id": 637,
                                        "name": "ElementaryTypeName",
                                        "src": "955:7:4"
                                      }
                                    ],
                                    "id": 638,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "955:7:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 631,
                                      "type": "uint112",
                                      "value": "x"
                                    },
                                    "id": 639,
                                    "name": "Identifier",
                                    "src": "963:1:4"
                                  }
                                ],
                                "id": 640,
                                "name": "FunctionCall",
                                "src": "955:10:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 620,
                                  "type": "uint8",
                                  "value": "RESOLUTION"
                                },
                                "id": 641,
                                "name": "Identifier",
                                "src": "969:10:4"
                              }
                            ],
                            "id": 642,
                            "name": "BinaryOperation",
                            "src": "955:24:4"
                          }
                        ],
                        "id": 643,
                        "name": "FunctionCall",
                        "src": "945:35:4"
                      }
                    ],
                    "id": 644,
                    "name": "Return",
                    "src": "938:42:4"
                  }
                ],
                "id": 645,
                "name": "Block",
                "src": "928:59:4"
              }
            ],
            "id": 646,
            "name": "FunctionDefinition",
            "src": "860:127:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "encode144",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "x",
                      "overrides": null,
                      "scope": 663,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint144",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint144",
                          "type": "uint144"
                        },
                        "id": 647,
                        "name": "ElementaryTypeName",
                        "src": "1052:7:4"
                      }
                    ],
                    "id": 648,
                    "name": "VariableDeclaration",
                    "src": "1052:9:4"
                  }
                ],
                "id": 649,
                "name": "ParameterList",
                "src": "1051:11:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 663,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq144x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq144x112",
                          "referencedDeclaration": 617,
                          "type": "struct FixedPoint.uq144x112"
                        },
                        "id": 650,
                        "name": "UserDefinedTypeName",
                        "src": "1086:9:4"
                      }
                    ],
                    "id": 651,
                    "name": "VariableDeclaration",
                    "src": "1086:16:4"
                  }
                ],
                "id": 652,
                "name": "ParameterList",
                "src": "1085:18:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 652
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq144x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 617,
                              "type": "type(struct FixedPoint.uq144x112 storage pointer)",
                              "value": "uq144x112"
                            },
                            "id": 653,
                            "name": "Identifier",
                            "src": "1121:9:4"
                          },
                          {
                            "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_uint144",
                                          "typeString": "uint144"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint256",
                                          "type": null
                                        },
                                        "id": 654,
                                        "name": "ElementaryTypeName",
                                        "src": "1131:7:4"
                                      }
                                    ],
                                    "id": 655,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1131:7:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 648,
                                      "type": "uint144",
                                      "value": "x"
                                    },
                                    "id": 656,
                                    "name": "Identifier",
                                    "src": "1139:1:4"
                                  }
                                ],
                                "id": 657,
                                "name": "FunctionCall",
                                "src": "1131:10:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 620,
                                  "type": "uint8",
                                  "value": "RESOLUTION"
                                },
                                "id": 658,
                                "name": "Identifier",
                                "src": "1145:10:4"
                              }
                            ],
                            "id": 659,
                            "name": "BinaryOperation",
                            "src": "1131:24:4"
                          }
                        ],
                        "id": 660,
                        "name": "FunctionCall",
                        "src": "1121:35:4"
                      }
                    ],
                    "id": 661,
                    "name": "Return",
                    "src": "1114:42:4"
                  }
                ],
                "id": 662,
                "name": "Block",
                "src": "1104:59:4"
              }
            ],
            "id": 663,
            "name": "FunctionDefinition",
            "src": "1033:130:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "decode",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 679,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 664,
                        "name": "UserDefinedTypeName",
                        "src": "1262:9:4"
                      }
                    ],
                    "id": 665,
                    "name": "VariableDeclaration",
                    "src": "1262:21:4"
                  }
                ],
                "id": 666,
                "name": "ParameterList",
                "src": "1261:23:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 679,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint112",
                          "type": "uint112"
                        },
                        "id": 667,
                        "name": "ElementaryTypeName",
                        "src": "1308:7:4"
                      }
                    ],
                    "id": 668,
                    "name": "VariableDeclaration",
                    "src": "1308:7:4"
                  }
                ],
                "id": 669,
                "name": "ParameterList",
                "src": "1307:9:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 669
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint112",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint112)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint112",
                                  "type": null
                                },
                                "id": 670,
                                "name": "ElementaryTypeName",
                                "src": "1334:7:4"
                              }
                            ],
                            "id": 671,
                            "name": "ElementaryTypeNameExpression",
                            "src": "1334:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">>",
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 665,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "self"
                                    },
                                    "id": 672,
                                    "name": "Identifier",
                                    "src": "1342:4:4"
                                  }
                                ],
                                "id": 673,
                                "name": "MemberAccess",
                                "src": "1342:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 620,
                                  "type": "uint8",
                                  "value": "RESOLUTION"
                                },
                                "id": 674,
                                "name": "Identifier",
                                "src": "1353:10:4"
                              }
                            ],
                            "id": 675,
                            "name": "BinaryOperation",
                            "src": "1342:21:4"
                          }
                        ],
                        "id": 676,
                        "name": "FunctionCall",
                        "src": "1334:30:4"
                      }
                    ],
                    "id": 677,
                    "name": "Return",
                    "src": "1327:37:4"
                  }
                ],
                "id": 678,
                "name": "Block",
                "src": "1317:54:4"
              }
            ],
            "id": 679,
            "name": "FunctionDefinition",
            "src": "1246:125:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "decode144",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 695,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq144x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq144x112",
                          "referencedDeclaration": 617,
                          "type": "struct FixedPoint.uq144x112"
                        },
                        "id": 680,
                        "name": "UserDefinedTypeName",
                        "src": "1473:9:4"
                      }
                    ],
                    "id": 681,
                    "name": "VariableDeclaration",
                    "src": "1473:21:4"
                  }
                ],
                "id": 682,
                "name": "ParameterList",
                "src": "1472:23:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 695,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint144",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint144",
                          "type": "uint144"
                        },
                        "id": 683,
                        "name": "ElementaryTypeName",
                        "src": "1519:7:4"
                      }
                    ],
                    "id": 684,
                    "name": "VariableDeclaration",
                    "src": "1519:7:4"
                  }
                ],
                "id": 685,
                "name": "ParameterList",
                "src": "1518:9:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 685
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint144",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint144)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint144",
                                  "type": null
                                },
                                "id": 686,
                                "name": "ElementaryTypeName",
                                "src": "1545:7:4"
                              }
                            ],
                            "id": 687,
                            "name": "ElementaryTypeNameExpression",
                            "src": "1545:7:4"
                          },
                          {
                            "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": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 616,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 681,
                                      "type": "struct FixedPoint.uq144x112 memory",
                                      "value": "self"
                                    },
                                    "id": 688,
                                    "name": "Identifier",
                                    "src": "1553:4:4"
                                  }
                                ],
                                "id": 689,
                                "name": "MemberAccess",
                                "src": "1553:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 620,
                                  "type": "uint8",
                                  "value": "RESOLUTION"
                                },
                                "id": 690,
                                "name": "Identifier",
                                "src": "1564:10:4"
                              }
                            ],
                            "id": 691,
                            "name": "BinaryOperation",
                            "src": "1553:21:4"
                          }
                        ],
                        "id": 692,
                        "name": "FunctionCall",
                        "src": "1545:30:4"
                      }
                    ],
                    "id": 693,
                    "name": "Return",
                    "src": "1538:37:4"
                  }
                ],
                "id": 694,
                "name": "Block",
                "src": "1528:54:4"
              }
            ],
            "id": 695,
            "name": "FunctionDefinition",
            "src": "1454:128:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "mul",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 733,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 696,
                        "name": "UserDefinedTypeName",
                        "src": "1689:9:4"
                      }
                    ],
                    "id": 697,
                    "name": "VariableDeclaration",
                    "src": "1689:21:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "y",
                      "overrides": null,
                      "scope": 733,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 698,
                        "name": "ElementaryTypeName",
                        "src": "1712:7:4"
                      }
                    ],
                    "id": 699,
                    "name": "VariableDeclaration",
                    "src": "1712:9:4"
                  }
                ],
                "id": 700,
                "name": "ParameterList",
                "src": "1688:34:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 733,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq144x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq144x112",
                          "referencedDeclaration": 617,
                          "type": "struct FixedPoint.uq144x112"
                        },
                        "id": 701,
                        "name": "UserDefinedTypeName",
                        "src": "1746:9:4"
                      }
                    ],
                    "id": 702,
                    "name": "VariableDeclaration",
                    "src": "1746:16:4"
                  }
                ],
                "id": 703,
                "name": "ParameterList",
                "src": "1745:18:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        705
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "z",
                          "overrides": null,
                          "scope": 732,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 704,
                            "name": "ElementaryTypeName",
                            "src": "1774:7:4"
                          }
                        ],
                        "id": 705,
                        "name": "VariableDeclaration",
                        "src": "1774:9:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 706,
                        "name": "Literal",
                        "src": "1786:1:4"
                      }
                    ],
                    "id": 707,
                    "name": "VariableDeclarationStatement",
                    "src": "1774:13:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                                  "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 708,
                            "name": "Identifier",
                            "src": "1797:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 699,
                                      "type": "uint256",
                                      "value": "y"
                                    },
                                    "id": 709,
                                    "name": "Identifier",
                                    "src": "1805:1:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 710,
                                    "name": "Literal",
                                    "src": "1810:1:4"
                                  }
                                ],
                                "id": 711,
                                "name": "BinaryOperation",
                                "src": "1805:6:4"
                              },
                              {
                                "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": 705,
                                                  "type": "uint256",
                                                  "value": "z"
                                                },
                                                "id": 712,
                                                "name": "Identifier",
                                                "src": "1816:1:4"
                                              },
                                              {
                                                "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": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "_x",
                                                      "referencedDeclaration": 613,
                                                      "type": "uint224"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 697,
                                                          "type": "struct FixedPoint.uq112x112 memory",
                                                          "value": "self"
                                                        },
                                                        "id": 713,
                                                        "name": "Identifier",
                                                        "src": "1820:4:4"
                                                      }
                                                    ],
                                                    "id": 714,
                                                    "name": "MemberAccess",
                                                    "src": "1820:7:4"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 699,
                                                      "type": "uint256",
                                                      "value": "y"
                                                    },
                                                    "id": 715,
                                                    "name": "Identifier",
                                                    "src": "1830:1:4"
                                                  }
                                                ],
                                                "id": 716,
                                                "name": "BinaryOperation",
                                                "src": "1820:11:4"
                                              }
                                            ],
                                            "id": 717,
                                            "name": "Assignment",
                                            "src": "1816:15:4"
                                          }
                                        ],
                                        "id": 718,
                                        "name": "TupleExpression",
                                        "src": "1815:17:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 699,
                                          "type": "uint256",
                                          "value": "y"
                                        },
                                        "id": 719,
                                        "name": "Identifier",
                                        "src": "1835:1:4"
                                      }
                                    ],
                                    "id": 720,
                                    "name": "BinaryOperation",
                                    "src": "1815:21:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "_x",
                                      "referencedDeclaration": 613,
                                      "type": "uint224"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 697,
                                          "type": "struct FixedPoint.uq112x112 memory",
                                          "value": "self"
                                        },
                                        "id": 721,
                                        "name": "Identifier",
                                        "src": "1840:4:4"
                                      }
                                    ],
                                    "id": 722,
                                    "name": "MemberAccess",
                                    "src": "1840:7:4"
                                  }
                                ],
                                "id": 723,
                                "name": "BinaryOperation",
                                "src": "1815:32:4"
                              }
                            ],
                            "id": 724,
                            "name": "BinaryOperation",
                            "src": "1805:42:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204d554c5f4f564552464c4f57",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: MUL_OVERFLOW\"",
                              "value": "FixedPoint: MUL_OVERFLOW"
                            },
                            "id": 725,
                            "name": "Literal",
                            "src": "1849:26:4"
                          }
                        ],
                        "id": 726,
                        "name": "FunctionCall",
                        "src": "1797:79:4"
                      }
                    ],
                    "id": 727,
                    "name": "ExpressionStatement",
                    "src": "1797:79:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 703
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq144x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 617,
                              "type": "type(struct FixedPoint.uq144x112 storage pointer)",
                              "value": "uq144x112"
                            },
                            "id": 728,
                            "name": "Identifier",
                            "src": "1893:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 705,
                              "type": "uint256",
                              "value": "z"
                            },
                            "id": 729,
                            "name": "Identifier",
                            "src": "1903:1:4"
                          }
                        ],
                        "id": 730,
                        "name": "FunctionCall",
                        "src": "1893:12:4"
                      }
                    ],
                    "id": 731,
                    "name": "Return",
                    "src": "1886:19:4"
                  }
                ],
                "id": 732,
                "name": "Block",
                "src": "1764:148:4"
              }
            ],
            "id": 733,
            "name": "FunctionDefinition",
            "src": "1676:236:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "muli",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 785,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 734,
                        "name": "UserDefinedTypeName",
                        "src": "2026:9:4"
                      }
                    ],
                    "id": 735,
                    "name": "VariableDeclaration",
                    "src": "2026:21:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "y",
                      "overrides": null,
                      "scope": 785,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 736,
                        "name": "ElementaryTypeName",
                        "src": "2049:6:4"
                      }
                    ],
                    "id": 737,
                    "name": "VariableDeclaration",
                    "src": "2049:8:4"
                  }
                ],
                "id": 738,
                "name": "ParameterList",
                "src": "2025:33:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 785,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 739,
                        "name": "ElementaryTypeName",
                        "src": "2082:6:4"
                      }
                    ],
                    "id": 740,
                    "name": "VariableDeclaration",
                    "src": "2082:6:4"
                  }
                ],
                "id": 741,
                "name": "ParameterList",
                "src": "2081:8:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        743
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "z",
                          "overrides": null,
                          "scope": 784,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 742,
                            "name": "ElementaryTypeName",
                            "src": "2100:7:4"
                          }
                        ],
                        "id": 743,
                        "name": "VariableDeclaration",
                        "src": "2100:9:4"
                      },
                      {
                        "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_uint224",
                                  "typeString": "uint224"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mulDiv",
                              "referencedDeclaration": 1378,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1379,
                                  "type": "type(library FullMath)",
                                  "value": "FullMath"
                                },
                                "id": 744,
                                "name": "Identifier",
                                "src": "2112:8:4"
                              }
                            ],
                            "id": 745,
                            "name": "MemberAccess",
                            "src": "2112:15:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 735,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "self"
                                },
                                "id": 746,
                                "name": "Identifier",
                                "src": "2128:4:4"
                              }
                            ],
                            "id": 747,
                            "name": "MemberAccess",
                            "src": "2128:7:4"
                          },
                          {
                            "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_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": null
                                    },
                                    "id": 748,
                                    "name": "ElementaryTypeName",
                                    "src": "2137:7:4"
                                  }
                                ],
                                "id": 749,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2137:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "int256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "<",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 737,
                                          "type": "int256",
                                          "value": "y"
                                        },
                                        "id": 750,
                                        "name": "Identifier",
                                        "src": "2145:1:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 751,
                                        "name": "Literal",
                                        "src": "2149:1:4"
                                      }
                                    ],
                                    "id": 752,
                                    "name": "BinaryOperation",
                                    "src": "2145:5:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "prefix": true,
                                      "type": "int256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 737,
                                          "type": "int256",
                                          "value": "y"
                                        },
                                        "id": 753,
                                        "name": "Identifier",
                                        "src": "2154:1:4"
                                      }
                                    ],
                                    "id": 754,
                                    "name": "UnaryOperation",
                                    "src": "2153:2:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 737,
                                      "type": "int256",
                                      "value": "y"
                                    },
                                    "id": 755,
                                    "name": "Identifier",
                                    "src": "2158:1:4"
                                  }
                                ],
                                "id": 756,
                                "name": "Conditional",
                                "src": "2145:14:4"
                              }
                            ],
                            "id": 757,
                            "name": "FunctionCall",
                            "src": "2137:23:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 623,
                              "type": "uint256",
                              "value": "Q112"
                            },
                            "id": 758,
                            "name": "Identifier",
                            "src": "2162:4:4"
                          }
                        ],
                        "id": 759,
                        "name": "FunctionCall",
                        "src": "2112:55:4"
                      }
                    ],
                    "id": 760,
                    "name": "VariableDeclarationStatement",
                    "src": "2100:67:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_914c90235670df1ae5bf52334659fe1406f845f46800f1d0de0a5462ab169feb",
                                  "typeString": "literal_string \"FixedPoint: MULI_OVERFLOW\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 761,
                            "name": "Identifier",
                            "src": "2177:7:4"
                          },
                          {
                            "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": 743,
                                  "type": "uint256",
                                  "value": "z"
                                },
                                "id": 762,
                                "name": "Identifier",
                                "src": "2185:1:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                                    "typeString": "int_const 5789...(69 digits omitted)...9968"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "**",
                                  "type": "int_const 5789...(69 digits omitted)...9968"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "32",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 2",
                                      "value": "2"
                                    },
                                    "id": 763,
                                    "name": "Literal",
                                    "src": "2189:1:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "323535",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 255",
                                      "value": "255"
                                    },
                                    "id": 764,
                                    "name": "Literal",
                                    "src": "2192:3:4"
                                  }
                                ],
                                "id": 765,
                                "name": "BinaryOperation",
                                "src": "2189:6:4"
                              }
                            ],
                            "id": 766,
                            "name": "BinaryOperation",
                            "src": "2185:10:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204d554c495f4f564552464c4f57",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: MULI_OVERFLOW\"",
                              "value": "FixedPoint: MULI_OVERFLOW"
                            },
                            "id": 767,
                            "name": "Literal",
                            "src": "2197:27:4"
                          }
                        ],
                        "id": 768,
                        "name": "FunctionCall",
                        "src": "2177:48:4"
                      }
                    ],
                    "id": 769,
                    "name": "ExpressionStatement",
                    "src": "2177:48:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 741
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "int256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 737,
                                  "type": "int256",
                                  "value": "y"
                                },
                                "id": 770,
                                "name": "Identifier",
                                "src": "2242:1:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 771,
                                "name": "Literal",
                                "src": "2246:1:4"
                              }
                            ],
                            "id": 772,
                            "name": "BinaryOperation",
                            "src": "2242:5:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "prefix": true,
                              "type": "int256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "int256",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(int256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "int256",
                                          "type": null
                                        },
                                        "id": 773,
                                        "name": "ElementaryTypeName",
                                        "src": "2251:6:4"
                                      }
                                    ],
                                    "id": 774,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2251:6:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 743,
                                      "type": "uint256",
                                      "value": "z"
                                    },
                                    "id": 775,
                                    "name": "Identifier",
                                    "src": "2258:1:4"
                                  }
                                ],
                                "id": 776,
                                "name": "FunctionCall",
                                "src": "2251:9:4"
                              }
                            ],
                            "id": 777,
                            "name": "UnaryOperation",
                            "src": "2250:10:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "int256",
                                      "type": null
                                    },
                                    "id": 778,
                                    "name": "ElementaryTypeName",
                                    "src": "2263:6:4"
                                  }
                                ],
                                "id": 779,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2263:6:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 743,
                                  "type": "uint256",
                                  "value": "z"
                                },
                                "id": 780,
                                "name": "Identifier",
                                "src": "2270:1:4"
                              }
                            ],
                            "id": 781,
                            "name": "FunctionCall",
                            "src": "2263:9:4"
                          }
                        ],
                        "id": 782,
                        "name": "Conditional",
                        "src": "2242:30:4"
                      }
                    ],
                    "id": 783,
                    "name": "Return",
                    "src": "2235:37:4"
                  }
                ],
                "id": 784,
                "name": "Block",
                "src": "2090:189:4"
              }
            ],
            "id": 785,
            "name": "FunctionDefinition",
            "src": "2012:267:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "muluq",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 933,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 786,
                        "name": "UserDefinedTypeName",
                        "src": "2379:9:4"
                      }
                    ],
                    "id": 787,
                    "name": "VariableDeclaration",
                    "src": "2379:21:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "overrides": null,
                      "scope": 933,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 788,
                        "name": "UserDefinedTypeName",
                        "src": "2402:9:4"
                      }
                    ],
                    "id": 789,
                    "name": "VariableDeclaration",
                    "src": "2402:22:4"
                  }
                ],
                "id": 790,
                "name": "ParameterList",
                "src": "2378:47:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 933,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 791,
                        "name": "UserDefinedTypeName",
                        "src": "2449:9:4"
                      }
                    ],
                    "id": 792,
                    "name": "VariableDeclaration",
                    "src": "2449:16:4"
                  }
                ],
                "id": 793,
                "name": "ParameterList",
                "src": "2448:18:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "||",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 787,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "self"
                                    },
                                    "id": 794,
                                    "name": "Identifier",
                                    "src": "2481:4:4"
                                  }
                                ],
                                "id": 795,
                                "name": "MemberAccess",
                                "src": "2481:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 796,
                                "name": "Literal",
                                "src": "2492:1:4"
                              }
                            ],
                            "id": 797,
                            "name": "BinaryOperation",
                            "src": "2481:12:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 789,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "other"
                                    },
                                    "id": 798,
                                    "name": "Identifier",
                                    "src": "2497:5:4"
                                  }
                                ],
                                "id": 799,
                                "name": "MemberAccess",
                                "src": "2497:8:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 800,
                                "name": "Literal",
                                "src": "2509:1:4"
                              }
                            ],
                            "id": 801,
                            "name": "BinaryOperation",
                            "src": "2497:13:4"
                          }
                        ],
                        "id": 802,
                        "name": "BinaryOperation",
                        "src": "2481:29:4"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 793
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": true,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 614,
                                      "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                                      "value": "uq112x112"
                                    },
                                    "id": 803,
                                    "name": "Identifier",
                                    "src": "2533:9:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 804,
                                    "name": "Literal",
                                    "src": "2543:1:4"
                                  }
                                ],
                                "id": 805,
                                "name": "FunctionCall",
                                "src": "2533:12:4"
                              }
                            ],
                            "id": 806,
                            "name": "Return",
                            "src": "2526:19:4"
                          }
                        ],
                        "id": 807,
                        "name": "Block",
                        "src": "2512:44:4"
                      }
                    ],
                    "id": 808,
                    "name": "IfStatement",
                    "src": "2477:79:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        810
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "upper_self",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint112",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint112",
                              "type": "uint112"
                            },
                            "id": 809,
                            "name": "ElementaryTypeName",
                            "src": "2565:7:4"
                          }
                        ],
                        "id": 810,
                        "name": "VariableDeclaration",
                        "src": "2565:18:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint112",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint112)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint112",
                                  "type": null
                                },
                                "id": 811,
                                "name": "ElementaryTypeName",
                                "src": "2586:7:4"
                              }
                            ],
                            "id": 812,
                            "name": "ElementaryTypeNameExpression",
                            "src": "2586:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">>",
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 787,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "self"
                                    },
                                    "id": 813,
                                    "name": "Identifier",
                                    "src": "2594:4:4"
                                  }
                                ],
                                "id": 814,
                                "name": "MemberAccess",
                                "src": "2594:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 620,
                                  "type": "uint8",
                                  "value": "RESOLUTION"
                                },
                                "id": 815,
                                "name": "Identifier",
                                "src": "2605:10:4"
                              }
                            ],
                            "id": 816,
                            "name": "BinaryOperation",
                            "src": "2594:21:4"
                          }
                        ],
                        "id": 817,
                        "name": "FunctionCall",
                        "src": "2586:30:4"
                      }
                    ],
                    "id": 818,
                    "name": "VariableDeclarationStatement",
                    "src": "2565:51:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        820
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lower_self",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint112",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint112",
                              "type": "uint112"
                            },
                            "id": 819,
                            "name": "ElementaryTypeName",
                            "src": "2635:7:4"
                          }
                        ],
                        "id": 820,
                        "name": "VariableDeclaration",
                        "src": "2635:18:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint112",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint112)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint112",
                                  "type": null
                                },
                                "id": 821,
                                "name": "ElementaryTypeName",
                                "src": "2656:7:4"
                              }
                            ],
                            "id": 822,
                            "name": "ElementaryTypeNameExpression",
                            "src": "2656:7:4"
                          },
                          {
                            "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": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 787,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "self"
                                    },
                                    "id": 823,
                                    "name": "Identifier",
                                    "src": "2664:4:4"
                                  }
                                ],
                                "id": 824,
                                "name": "MemberAccess",
                                "src": "2664:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 629,
                                  "type": "uint256",
                                  "value": "LOWER_MASK"
                                },
                                "id": 825,
                                "name": "Identifier",
                                "src": "2674:10:4"
                              }
                            ],
                            "id": 826,
                            "name": "BinaryOperation",
                            "src": "2664:20:4"
                          }
                        ],
                        "id": 827,
                        "name": "FunctionCall",
                        "src": "2656:29:4"
                      }
                    ],
                    "id": 828,
                    "name": "VariableDeclarationStatement",
                    "src": "2635:50:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        830
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "upper_other",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint112",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint112",
                              "type": "uint112"
                            },
                            "id": 829,
                            "name": "ElementaryTypeName",
                            "src": "2707:7:4"
                          }
                        ],
                        "id": 830,
                        "name": "VariableDeclaration",
                        "src": "2707:19:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint112",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint112)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint112",
                                  "type": null
                                },
                                "id": 831,
                                "name": "ElementaryTypeName",
                                "src": "2729:7:4"
                              }
                            ],
                            "id": 832,
                            "name": "ElementaryTypeNameExpression",
                            "src": "2729:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">>",
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 789,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "other"
                                    },
                                    "id": 833,
                                    "name": "Identifier",
                                    "src": "2737:5:4"
                                  }
                                ],
                                "id": 834,
                                "name": "MemberAccess",
                                "src": "2737:8:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 620,
                                  "type": "uint8",
                                  "value": "RESOLUTION"
                                },
                                "id": 835,
                                "name": "Identifier",
                                "src": "2749:10:4"
                              }
                            ],
                            "id": 836,
                            "name": "BinaryOperation",
                            "src": "2737:22:4"
                          }
                        ],
                        "id": 837,
                        "name": "FunctionCall",
                        "src": "2729:31:4"
                      }
                    ],
                    "id": 838,
                    "name": "VariableDeclarationStatement",
                    "src": "2707:53:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        840
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lower_other",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint112",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint112",
                              "type": "uint112"
                            },
                            "id": 839,
                            "name": "ElementaryTypeName",
                            "src": "2779:7:4"
                          }
                        ],
                        "id": 840,
                        "name": "VariableDeclaration",
                        "src": "2779:19:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint112",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint112)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint112",
                                  "type": null
                                },
                                "id": 841,
                                "name": "ElementaryTypeName",
                                "src": "2801:7:4"
                              }
                            ],
                            "id": 842,
                            "name": "ElementaryTypeNameExpression",
                            "src": "2801:7:4"
                          },
                          {
                            "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": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 789,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "other"
                                    },
                                    "id": 843,
                                    "name": "Identifier",
                                    "src": "2809:5:4"
                                  }
                                ],
                                "id": 844,
                                "name": "MemberAccess",
                                "src": "2809:8:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 629,
                                  "type": "uint256",
                                  "value": "LOWER_MASK"
                                },
                                "id": 845,
                                "name": "Identifier",
                                "src": "2820:10:4"
                              }
                            ],
                            "id": 846,
                            "name": "BinaryOperation",
                            "src": "2809:21:4"
                          }
                        ],
                        "id": 847,
                        "name": "FunctionCall",
                        "src": "2801:30:4"
                      }
                    ],
                    "id": 848,
                    "name": "VariableDeclarationStatement",
                    "src": "2779:52:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        850
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "upper",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint224",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint224",
                              "type": "uint224"
                            },
                            "id": 849,
                            "name": "ElementaryTypeName",
                            "src": "2882:7:4"
                          }
                        ],
                        "id": 850,
                        "name": "VariableDeclaration",
                        "src": "2882:13:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*",
                          "type": "uint224"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 851,
                                    "name": "ElementaryTypeName",
                                    "src": "2898:7:4"
                                  }
                                ],
                                "id": 852,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2898:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 810,
                                  "type": "uint112",
                                  "value": "upper_self"
                                },
                                "id": 853,
                                "name": "Identifier",
                                "src": "2906:10:4"
                              }
                            ],
                            "id": 854,
                            "name": "FunctionCall",
                            "src": "2898:19:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 830,
                              "type": "uint112",
                              "value": "upper_other"
                            },
                            "id": 855,
                            "name": "Identifier",
                            "src": "2920:11:4"
                          }
                        ],
                        "id": 856,
                        "name": "BinaryOperation",
                        "src": "2898:33:4"
                      }
                    ],
                    "id": 857,
                    "name": "VariableDeclarationStatement",
                    "src": "2882:49:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        859
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lower",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint224",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint224",
                              "type": "uint224"
                            },
                            "id": 858,
                            "name": "ElementaryTypeName",
                            "src": "2950:7:4"
                          }
                        ],
                        "id": 859,
                        "name": "VariableDeclaration",
                        "src": "2950:13:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*",
                          "type": "uint224"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 860,
                                    "name": "ElementaryTypeName",
                                    "src": "2966:7:4"
                                  }
                                ],
                                "id": 861,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2966:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 820,
                                  "type": "uint112",
                                  "value": "lower_self"
                                },
                                "id": 862,
                                "name": "Identifier",
                                "src": "2974:10:4"
                              }
                            ],
                            "id": 863,
                            "name": "FunctionCall",
                            "src": "2966:19:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 840,
                              "type": "uint112",
                              "value": "lower_other"
                            },
                            "id": 864,
                            "name": "Identifier",
                            "src": "2988:11:4"
                          }
                        ],
                        "id": 865,
                        "name": "BinaryOperation",
                        "src": "2966:33:4"
                      }
                    ],
                    "id": 866,
                    "name": "VariableDeclarationStatement",
                    "src": "2950:49:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        868
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "uppers_lowero",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint224",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint224",
                              "type": "uint224"
                            },
                            "id": 867,
                            "name": "ElementaryTypeName",
                            "src": "3021:7:4"
                          }
                        ],
                        "id": 868,
                        "name": "VariableDeclaration",
                        "src": "3021:21:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*",
                          "type": "uint224"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 869,
                                    "name": "ElementaryTypeName",
                                    "src": "3045:7:4"
                                  }
                                ],
                                "id": 870,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3045:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 810,
                                  "type": "uint112",
                                  "value": "upper_self"
                                },
                                "id": 871,
                                "name": "Identifier",
                                "src": "3053:10:4"
                              }
                            ],
                            "id": 872,
                            "name": "FunctionCall",
                            "src": "3045:19:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 840,
                              "type": "uint112",
                              "value": "lower_other"
                            },
                            "id": 873,
                            "name": "Identifier",
                            "src": "3067:11:4"
                          }
                        ],
                        "id": 874,
                        "name": "BinaryOperation",
                        "src": "3045:33:4"
                      }
                    ],
                    "id": 875,
                    "name": "VariableDeclarationStatement",
                    "src": "3021:57:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        877
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "uppero_lowers",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint224",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint224",
                              "type": "uint224"
                            },
                            "id": 876,
                            "name": "ElementaryTypeName",
                            "src": "3100:7:4"
                          }
                        ],
                        "id": 877,
                        "name": "VariableDeclaration",
                        "src": "3100:21:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*",
                          "type": "uint224"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 878,
                                    "name": "ElementaryTypeName",
                                    "src": "3124:7:4"
                                  }
                                ],
                                "id": 879,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3124:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 830,
                                  "type": "uint112",
                                  "value": "upper_other"
                                },
                                "id": 880,
                                "name": "Identifier",
                                "src": "3132:11:4"
                              }
                            ],
                            "id": 881,
                            "name": "FunctionCall",
                            "src": "3124:20:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 820,
                              "type": "uint112",
                              "value": "lower_self"
                            },
                            "id": 882,
                            "name": "Identifier",
                            "src": "3147:10:4"
                          }
                        ],
                        "id": 883,
                        "name": "BinaryOperation",
                        "src": "3124:33:4"
                      }
                    ],
                    "id": 884,
                    "name": "VariableDeclarationStatement",
                    "src": "3100:57:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                                  "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 885,
                            "name": "Identifier",
                            "src": "3226:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 850,
                                  "type": "uint224",
                                  "value": "upper"
                                },
                                "id": 886,
                                "name": "Identifier",
                                "src": "3234:5:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint112",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint112)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint112",
                                          "type": null
                                        },
                                        "id": 887,
                                        "name": "ElementaryTypeName",
                                        "src": "3243:7:4"
                                      }
                                    ],
                                    "id": 888,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3243:7:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "prefix": true,
                                      "type": "int_const -1"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 889,
                                        "name": "Literal",
                                        "src": "3252:1:4"
                                      }
                                    ],
                                    "id": 890,
                                    "name": "UnaryOperation",
                                    "src": "3251:2:4"
                                  }
                                ],
                                "id": 891,
                                "name": "FunctionCall",
                                "src": "3243:11:4"
                              }
                            ],
                            "id": 892,
                            "name": "BinaryOperation",
                            "src": "3234:20:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f5550504552",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\"",
                              "value": "FixedPoint: MULUQ_OVERFLOW_UPPER"
                            },
                            "id": 893,
                            "name": "Literal",
                            "src": "3256:34:4"
                          }
                        ],
                        "id": 894,
                        "name": "FunctionCall",
                        "src": "3226:65:4"
                      }
                    ],
                    "id": 895,
                    "name": "ExpressionStatement",
                    "src": "3226:65:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        897
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "sum",
                          "overrides": null,
                          "scope": 932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 896,
                            "name": "ElementaryTypeName",
                            "src": "3366:7:4"
                          }
                        ],
                        "id": 897,
                        "name": "VariableDeclaration",
                        "src": "3366:11:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+",
                          "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,
                                  "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_uint224",
                                              "typeString": "uint224"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint256",
                                              "type": null
                                            },
                                            "id": 898,
                                            "name": "ElementaryTypeName",
                                            "src": "3380:7:4"
                                          }
                                        ],
                                        "id": 899,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3380:7:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint224",
                                            "typeString": "uint224"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "<<",
                                          "type": "uint224"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 850,
                                              "type": "uint224",
                                              "value": "upper"
                                            },
                                            "id": 900,
                                            "name": "Identifier",
                                            "src": "3388:5:4"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 620,
                                              "type": "uint8",
                                              "value": "RESOLUTION"
                                            },
                                            "id": 901,
                                            "name": "Identifier",
                                            "src": "3397:10:4"
                                          }
                                        ],
                                        "id": 902,
                                        "name": "BinaryOperation",
                                        "src": "3388:19:4"
                                      }
                                    ],
                                    "id": 903,
                                    "name": "FunctionCall",
                                    "src": "3380:28:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 868,
                                      "type": "uint224",
                                      "value": "uppers_lowero"
                                    },
                                    "id": 904,
                                    "name": "Identifier",
                                    "src": "3411:13:4"
                                  }
                                ],
                                "id": 905,
                                "name": "BinaryOperation",
                                "src": "3380:44:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 877,
                                  "type": "uint224",
                                  "value": "uppero_lowers"
                                },
                                "id": 906,
                                "name": "Identifier",
                                "src": "3427:13:4"
                              }
                            ],
                            "id": 907,
                            "name": "BinaryOperation",
                            "src": "3380:60:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint224",
                                    "typeString": "uint224"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">>",
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 859,
                                      "type": "uint224",
                                      "value": "lower"
                                    },
                                    "id": 908,
                                    "name": "Identifier",
                                    "src": "3444:5:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 620,
                                      "type": "uint8",
                                      "value": "RESOLUTION"
                                    },
                                    "id": 909,
                                    "name": "Identifier",
                                    "src": "3453:10:4"
                                  }
                                ],
                                "id": 910,
                                "name": "BinaryOperation",
                                "src": "3444:19:4"
                              }
                            ],
                            "id": 911,
                            "name": "TupleExpression",
                            "src": "3443:21:4"
                          }
                        ],
                        "id": 912,
                        "name": "BinaryOperation",
                        "src": "3380:84:4"
                      }
                    ],
                    "id": 913,
                    "name": "VariableDeclarationStatement",
                    "src": "3366:98:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                                  "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 914,
                            "name": "Identifier",
                            "src": "3516:7:4"
                          },
                          {
                            "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": 897,
                                  "type": "uint256",
                                  "value": "sum"
                                },
                                "id": 915,
                                "name": "Identifier",
                                "src": "3524:3:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint224",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint224)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint224",
                                          "type": null
                                        },
                                        "id": 916,
                                        "name": "ElementaryTypeName",
                                        "src": "3531:7:4"
                                      }
                                    ],
                                    "id": 917,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3531:7:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "prefix": true,
                                      "type": "int_const -1"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 918,
                                        "name": "Literal",
                                        "src": "3540:1:4"
                                      }
                                    ],
                                    "id": 919,
                                    "name": "UnaryOperation",
                                    "src": "3539:2:4"
                                  }
                                ],
                                "id": 920,
                                "name": "FunctionCall",
                                "src": "3531:11:4"
                              }
                            ],
                            "id": 921,
                            "name": "BinaryOperation",
                            "src": "3524:18:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f53554d",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\"",
                              "value": "FixedPoint: MULUQ_OVERFLOW_SUM"
                            },
                            "id": 922,
                            "name": "Literal",
                            "src": "3544:32:4"
                          }
                        ],
                        "id": 923,
                        "name": "FunctionCall",
                        "src": "3516:61:4"
                      }
                    ],
                    "id": 924,
                    "name": "ExpressionStatement",
                    "src": "3516:61:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 793
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq112x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 614,
                              "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                              "value": "uq112x112"
                            },
                            "id": 925,
                            "name": "Identifier",
                            "src": "3595:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 926,
                                    "name": "ElementaryTypeName",
                                    "src": "3605:7:4"
                                  }
                                ],
                                "id": 927,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3605:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 897,
                                  "type": "uint256",
                                  "value": "sum"
                                },
                                "id": 928,
                                "name": "Identifier",
                                "src": "3613:3:4"
                              }
                            ],
                            "id": 929,
                            "name": "FunctionCall",
                            "src": "3605:12:4"
                          }
                        ],
                        "id": 930,
                        "name": "FunctionCall",
                        "src": "3595:23:4"
                      }
                    ],
                    "id": 931,
                    "name": "Return",
                    "src": "3588:30:4"
                  }
                ],
                "id": 932,
                "name": "Block",
                "src": "2467:1158:4"
              }
            ],
            "id": 933,
            "name": "FunctionDefinition",
            "src": "2364:1261:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "divuq",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 1036,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 934,
                        "name": "UserDefinedTypeName",
                        "src": "3710:9:4"
                      }
                    ],
                    "id": 935,
                    "name": "VariableDeclaration",
                    "src": "3710:21:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "overrides": null,
                      "scope": 1036,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 936,
                        "name": "UserDefinedTypeName",
                        "src": "3733:9:4"
                      }
                    ],
                    "id": 937,
                    "name": "VariableDeclaration",
                    "src": "3733:22:4"
                  }
                ],
                "id": 938,
                "name": "ParameterList",
                "src": "3709:47:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 1036,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 939,
                        "name": "UserDefinedTypeName",
                        "src": "3780:9:4"
                      }
                    ],
                    "id": 940,
                    "name": "VariableDeclaration",
                    "src": "3780:16:4"
                  }
                ],
                "id": 941,
                "name": "ParameterList",
                "src": "3779:18:4"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                                  "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 942,
                            "name": "Identifier",
                            "src": "3808:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 937,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "other"
                                    },
                                    "id": 943,
                                    "name": "Identifier",
                                    "src": "3816:5:4"
                                  }
                                ],
                                "id": 944,
                                "name": "MemberAccess",
                                "src": "3816:8:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 945,
                                "name": "Literal",
                                "src": "3827:1:4"
                              }
                            ],
                            "id": 946,
                            "name": "BinaryOperation",
                            "src": "3816:12:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204449565f42595f5a45524f5f4449565551",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\"",
                              "value": "FixedPoint: DIV_BY_ZERO_DIVUQ"
                            },
                            "id": 947,
                            "name": "Literal",
                            "src": "3830:31:4"
                          }
                        ],
                        "id": 948,
                        "name": "FunctionCall",
                        "src": "3808:54:4"
                      }
                    ],
                    "id": 949,
                    "name": "ExpressionStatement",
                    "src": "3808:54:4"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 935,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "self"
                                },
                                "id": 950,
                                "name": "Identifier",
                                "src": "3876:4:4"
                              }
                            ],
                            "id": 951,
                            "name": "MemberAccess",
                            "src": "3876:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 937,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "other"
                                },
                                "id": 952,
                                "name": "Identifier",
                                "src": "3887:5:4"
                              }
                            ],
                            "id": 953,
                            "name": "MemberAccess",
                            "src": "3887:8:4"
                          }
                        ],
                        "id": 954,
                        "name": "BinaryOperation",
                        "src": "3876:19:4"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 941
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": true,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 614,
                                      "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                                      "value": "uq112x112"
                                    },
                                    "id": 955,
                                    "name": "Identifier",
                                    "src": "3918:9:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint224",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint224)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint224",
                                              "type": null
                                            },
                                            "id": 956,
                                            "name": "ElementaryTypeName",
                                            "src": "3928:7:4"
                                          }
                                        ],
                                        "id": 957,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3928:7:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 623,
                                          "type": "uint256",
                                          "value": "Q112"
                                        },
                                        "id": 958,
                                        "name": "Identifier",
                                        "src": "3936:4:4"
                                      }
                                    ],
                                    "id": 959,
                                    "name": "FunctionCall",
                                    "src": "3928:13:4"
                                  }
                                ],
                                "id": 960,
                                "name": "FunctionCall",
                                "src": "3918:24:4"
                              }
                            ],
                            "id": 961,
                            "name": "Return",
                            "src": "3911:31:4"
                          }
                        ],
                        "id": 962,
                        "name": "Block",
                        "src": "3897:56:4"
                      }
                    ],
                    "id": 963,
                    "name": "IfStatement",
                    "src": "3872:81:4"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 935,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "self"
                                },
                                "id": 964,
                                "name": "Identifier",
                                "src": "3966:4:4"
                              }
                            ],
                            "id": 965,
                            "name": "MemberAccess",
                            "src": "3966:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint144",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint144)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint144",
                                      "type": null
                                    },
                                    "id": 966,
                                    "name": "ElementaryTypeName",
                                    "src": "3977:7:4"
                                  }
                                ],
                                "id": 967,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3977:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "prefix": true,
                                  "type": "int_const -1"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 968,
                                    "name": "Literal",
                                    "src": "3986:1:4"
                                  }
                                ],
                                "id": 969,
                                "name": "UnaryOperation",
                                "src": "3985:2:4"
                              }
                            ],
                            "id": 970,
                            "name": "FunctionCall",
                            "src": "3977:11:4"
                          }
                        ],
                        "id": 971,
                        "name": "BinaryOperation",
                        "src": "3966:22:4"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                973
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "overrides": null,
                                  "scope": 1004,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 972,
                                    "name": "ElementaryTypeName",
                                    "src": "4004:7:4"
                                  }
                                ],
                                "id": 973,
                                "name": "VariableDeclaration",
                                "src": "4004:13:4"
                              },
                              {
                                "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,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint256",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint224",
                                                      "typeString": "uint224"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint256",
                                                      "type": null
                                                    },
                                                    "id": 974,
                                                    "name": "ElementaryTypeName",
                                                    "src": "4021:7:4"
                                                  }
                                                ],
                                                "id": 975,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "4021:7:4"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "_x",
                                                  "referencedDeclaration": 613,
                                                  "type": "uint224"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 935,
                                                      "type": "struct FixedPoint.uq112x112 memory",
                                                      "value": "self"
                                                    },
                                                    "id": 976,
                                                    "name": "Identifier",
                                                    "src": "4029:4:4"
                                                  }
                                                ],
                                                "id": 977,
                                                "name": "MemberAccess",
                                                "src": "4029:7:4"
                                              }
                                            ],
                                            "id": 978,
                                            "name": "FunctionCall",
                                            "src": "4021:16:4"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 620,
                                              "type": "uint8",
                                              "value": "RESOLUTION"
                                            },
                                            "id": 979,
                                            "name": "Identifier",
                                            "src": "4041:10:4"
                                          }
                                        ],
                                        "id": 980,
                                        "name": "BinaryOperation",
                                        "src": "4021:30:4"
                                      }
                                    ],
                                    "id": 981,
                                    "name": "TupleExpression",
                                    "src": "4020:32:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "_x",
                                      "referencedDeclaration": 613,
                                      "type": "uint224"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 937,
                                          "type": "struct FixedPoint.uq112x112 memory",
                                          "value": "other"
                                        },
                                        "id": 982,
                                        "name": "Identifier",
                                        "src": "4055:5:4"
                                      }
                                    ],
                                    "id": 983,
                                    "name": "MemberAccess",
                                    "src": "4055:8:4"
                                  }
                                ],
                                "id": 984,
                                "name": "BinaryOperation",
                                "src": "4020:43:4"
                              }
                            ],
                            "id": 985,
                            "name": "VariableDeclarationStatement",
                            "src": "4004:59:4"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 986,
                                    "name": "Identifier",
                                    "src": "4077:7:4"
                                  },
                                  {
                                    "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": 973,
                                          "type": "uint256",
                                          "value": "value"
                                        },
                                        "id": 987,
                                        "name": "Identifier",
                                        "src": "4085:5:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint224",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                                  "typeString": "int_const -1"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint224)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint224",
                                                  "type": null
                                                },
                                                "id": 988,
                                                "name": "ElementaryTypeName",
                                                "src": "4094:7:4"
                                              }
                                            ],
                                            "id": 989,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "4094:7:4"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "operator": "-",
                                              "prefix": true,
                                              "type": "int_const -1"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 990,
                                                "name": "Literal",
                                                "src": "4103:1:4"
                                              }
                                            ],
                                            "id": 991,
                                            "name": "UnaryOperation",
                                            "src": "4102:2:4"
                                          }
                                        ],
                                        "id": 992,
                                        "name": "FunctionCall",
                                        "src": "4094:11:4"
                                      }
                                    ],
                                    "id": 993,
                                    "name": "BinaryOperation",
                                    "src": "4085:20:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\"",
                                      "value": "FixedPoint: DIVUQ_OVERFLOW"
                                    },
                                    "id": 994,
                                    "name": "Literal",
                                    "src": "4107:28:4"
                                  }
                                ],
                                "id": 995,
                                "name": "FunctionCall",
                                "src": "4077:59:4"
                              }
                            ],
                            "id": 996,
                            "name": "ExpressionStatement",
                            "src": "4077:59:4"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 941
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": true,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 614,
                                      "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                                      "value": "uq112x112"
                                    },
                                    "id": 997,
                                    "name": "Identifier",
                                    "src": "4157:9:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint224",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint224)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint224",
                                              "type": null
                                            },
                                            "id": 998,
                                            "name": "ElementaryTypeName",
                                            "src": "4167:7:4"
                                          }
                                        ],
                                        "id": 999,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "4167:7:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 973,
                                          "type": "uint256",
                                          "value": "value"
                                        },
                                        "id": 1000,
                                        "name": "Identifier",
                                        "src": "4175:5:4"
                                      }
                                    ],
                                    "id": 1001,
                                    "name": "FunctionCall",
                                    "src": "4167:14:4"
                                  }
                                ],
                                "id": 1002,
                                "name": "FunctionCall",
                                "src": "4157:25:4"
                              }
                            ],
                            "id": 1003,
                            "name": "Return",
                            "src": "4150:32:4"
                          }
                        ],
                        "id": 1004,
                        "name": "Block",
                        "src": "3990:203:4"
                      }
                    ],
                    "id": 1005,
                    "name": "IfStatement",
                    "src": "3962:231:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1007
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "result",
                          "overrides": null,
                          "scope": 1035,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1006,
                            "name": "ElementaryTypeName",
                            "src": "4203:7:4"
                          }
                        ],
                        "id": 1007,
                        "name": "VariableDeclaration",
                        "src": "4203:14:4"
                      },
                      {
                        "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_uint224",
                                  "typeString": "uint224"
                                },
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mulDiv",
                              "referencedDeclaration": 1378,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1379,
                                  "type": "type(library FullMath)",
                                  "value": "FullMath"
                                },
                                "id": 1008,
                                "name": "Identifier",
                                "src": "4220:8:4"
                              }
                            ],
                            "id": 1009,
                            "name": "MemberAccess",
                            "src": "4220:15:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 623,
                              "type": "uint256",
                              "value": "Q112"
                            },
                            "id": 1010,
                            "name": "Identifier",
                            "src": "4236:4:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 935,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "self"
                                },
                                "id": 1011,
                                "name": "Identifier",
                                "src": "4242:4:4"
                              }
                            ],
                            "id": 1012,
                            "name": "MemberAccess",
                            "src": "4242:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 937,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "other"
                                },
                                "id": 1013,
                                "name": "Identifier",
                                "src": "4251:5:4"
                              }
                            ],
                            "id": 1014,
                            "name": "MemberAccess",
                            "src": "4251:8:4"
                          }
                        ],
                        "id": 1015,
                        "name": "FunctionCall",
                        "src": "4220:40:4"
                      }
                    ],
                    "id": 1016,
                    "name": "VariableDeclarationStatement",
                    "src": "4203:57:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                  "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1017,
                            "name": "Identifier",
                            "src": "4270:7:4"
                          },
                          {
                            "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": 1007,
                                  "type": "uint256",
                                  "value": "result"
                                },
                                "id": 1018,
                                "name": "Identifier",
                                "src": "4278:6:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint224",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint224)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint224",
                                          "type": null
                                        },
                                        "id": 1019,
                                        "name": "ElementaryTypeName",
                                        "src": "4288:7:4"
                                      }
                                    ],
                                    "id": 1020,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4288:7:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "prefix": true,
                                      "type": "int_const -1"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1021,
                                        "name": "Literal",
                                        "src": "4297:1:4"
                                      }
                                    ],
                                    "id": 1022,
                                    "name": "UnaryOperation",
                                    "src": "4296:2:4"
                                  }
                                ],
                                "id": 1023,
                                "name": "FunctionCall",
                                "src": "4288:11:4"
                              }
                            ],
                            "id": 1024,
                            "name": "BinaryOperation",
                            "src": "4278:21:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\"",
                              "value": "FixedPoint: DIVUQ_OVERFLOW"
                            },
                            "id": 1025,
                            "name": "Literal",
                            "src": "4301:28:4"
                          }
                        ],
                        "id": 1026,
                        "name": "FunctionCall",
                        "src": "4270:60:4"
                      }
                    ],
                    "id": 1027,
                    "name": "ExpressionStatement",
                    "src": "4270:60:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 941
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq112x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 614,
                              "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                              "value": "uq112x112"
                            },
                            "id": 1028,
                            "name": "Identifier",
                            "src": "4347:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 1029,
                                    "name": "ElementaryTypeName",
                                    "src": "4357:7:4"
                                  }
                                ],
                                "id": 1030,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4357:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1007,
                                  "type": "uint256",
                                  "value": "result"
                                },
                                "id": 1031,
                                "name": "Identifier",
                                "src": "4365:6:4"
                              }
                            ],
                            "id": 1032,
                            "name": "FunctionCall",
                            "src": "4357:15:4"
                          }
                        ],
                        "id": 1033,
                        "name": "FunctionCall",
                        "src": "4347:26:4"
                      }
                    ],
                    "id": 1034,
                    "name": "Return",
                    "src": "4340:33:4"
                  }
                ],
                "id": 1035,
                "name": "Block",
                "src": "3798:582:4"
              }
            ],
            "id": 1036,
            "name": "FunctionDefinition",
            "src": "3695:685:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "fraction",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "numerator",
                      "overrides": null,
                      "scope": 1065,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint112",
                          "type": "uint112"
                        },
                        "id": 1037,
                        "name": "ElementaryTypeName",
                        "src": "4507:7:4"
                      }
                    ],
                    "id": 1038,
                    "name": "VariableDeclaration",
                    "src": "4507:17:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "denominator",
                      "overrides": null,
                      "scope": 1065,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint112",
                          "type": "uint112"
                        },
                        "id": 1039,
                        "name": "ElementaryTypeName",
                        "src": "4526:7:4"
                      }
                    ],
                    "id": 1040,
                    "name": "VariableDeclaration",
                    "src": "4526:19:4"
                  }
                ],
                "id": 1041,
                "name": "ParameterList",
                "src": "4506:40:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 1065,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 1042,
                        "name": "UserDefinedTypeName",
                        "src": "4570:9:4"
                      }
                    ],
                    "id": 1043,
                    "name": "VariableDeclaration",
                    "src": "4570:16:4"
                  }
                ],
                "id": 1044,
                "name": "ParameterList",
                "src": "4569:18:4"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                                  "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1045,
                            "name": "Identifier",
                            "src": "4598:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1040,
                                  "type": "uint112",
                                  "value": "denominator"
                                },
                                "id": 1046,
                                "name": "Identifier",
                                "src": "4606:11:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1047,
                                "name": "Literal",
                                "src": "4620:1:4"
                              }
                            ],
                            "id": 1048,
                            "name": "BinaryOperation",
                            "src": "4606:15:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204449565f42595f5a45524f5f4652414354494f4e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\"",
                              "value": "FixedPoint: DIV_BY_ZERO_FRACTION"
                            },
                            "id": 1049,
                            "name": "Literal",
                            "src": "4623:34:4"
                          }
                        ],
                        "id": 1050,
                        "name": "FunctionCall",
                        "src": "4598:60:4"
                      }
                    ],
                    "id": 1051,
                    "name": "ExpressionStatement",
                    "src": "4598:60:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1044
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq112x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 614,
                              "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                              "value": "uq112x112"
                            },
                            "id": 1052,
                            "name": "Identifier",
                            "src": "4675:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "<<",
                                      "type": "uint224"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint224",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint112",
                                                  "typeString": "uint112"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint224)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint224",
                                                  "type": null
                                                },
                                                "id": 1053,
                                                "name": "ElementaryTypeName",
                                                "src": "4686:7:4"
                                              }
                                            ],
                                            "id": 1054,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "4686:7:4"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1038,
                                              "type": "uint112",
                                              "value": "numerator"
                                            },
                                            "id": 1055,
                                            "name": "Identifier",
                                            "src": "4694:9:4"
                                          }
                                        ],
                                        "id": 1056,
                                        "name": "FunctionCall",
                                        "src": "4686:18:4"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 620,
                                          "type": "uint8",
                                          "value": "RESOLUTION"
                                        },
                                        "id": 1057,
                                        "name": "Identifier",
                                        "src": "4708:10:4"
                                      }
                                    ],
                                    "id": 1058,
                                    "name": "BinaryOperation",
                                    "src": "4686:32:4"
                                  }
                                ],
                                "id": 1059,
                                "name": "TupleExpression",
                                "src": "4685:34:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1040,
                                  "type": "uint112",
                                  "value": "denominator"
                                },
                                "id": 1060,
                                "name": "Identifier",
                                "src": "4722:11:4"
                              }
                            ],
                            "id": 1061,
                            "name": "BinaryOperation",
                            "src": "4685:48:4"
                          }
                        ],
                        "id": 1062,
                        "name": "FunctionCall",
                        "src": "4675:59:4"
                      }
                    ],
                    "id": 1063,
                    "name": "Return",
                    "src": "4668:66:4"
                  }
                ],
                "id": 1064,
                "name": "Block",
                "src": "4588:153:4"
              }
            ],
            "id": 1065,
            "name": "FunctionDefinition",
            "src": "4489:252:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "reciprocal",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 1091,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 1066,
                        "name": "UserDefinedTypeName",
                        "src": "4849:9:4"
                      }
                    ],
                    "id": 1067,
                    "name": "VariableDeclaration",
                    "src": "4849:21:4"
                  }
                ],
                "id": 1068,
                "name": "ParameterList",
                "src": "4848:23:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 1091,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 1069,
                        "name": "UserDefinedTypeName",
                        "src": "4895:9:4"
                      }
                    ],
                    "id": 1070,
                    "name": "VariableDeclaration",
                    "src": "4895:16:4"
                  }
                ],
                "id": 1071,
                "name": "ParameterList",
                "src": "4894:18:4"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                                  "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1072,
                            "name": "Identifier",
                            "src": "4923:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1067,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "self"
                                    },
                                    "id": 1073,
                                    "name": "Identifier",
                                    "src": "4931:4:4"
                                  }
                                ],
                                "id": 1074,
                                "name": "MemberAccess",
                                "src": "4931:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 1075,
                                "name": "Literal",
                                "src": "4941:1:4"
                              }
                            ],
                            "id": 1076,
                            "name": "BinaryOperation",
                            "src": "4931:11:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4669786564506f696e743a204449565f42595f5a45524f5f5245434950524f43414c5f4f525f4f564552464c4f57",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\"",
                              "value": "FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW"
                            },
                            "id": 1077,
                            "name": "Literal",
                            "src": "4944:48:4"
                          }
                        ],
                        "id": 1078,
                        "name": "FunctionCall",
                        "src": "4923:70:4"
                      }
                    ],
                    "id": 1079,
                    "name": "ExpressionStatement",
                    "src": "4923:70:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1071
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq112x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 614,
                              "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                              "value": "uq112x112"
                            },
                            "id": 1080,
                            "name": "Identifier",
                            "src": "5010:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 1081,
                                    "name": "ElementaryTypeName",
                                    "src": "5020:7:4"
                                  }
                                ],
                                "id": 1082,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5020:7:4"
                              },
                              {
                                "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": 626,
                                      "type": "uint256",
                                      "value": "Q224"
                                    },
                                    "id": 1083,
                                    "name": "Identifier",
                                    "src": "5028:4:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "_x",
                                      "referencedDeclaration": 613,
                                      "type": "uint224"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1067,
                                          "type": "struct FixedPoint.uq112x112 memory",
                                          "value": "self"
                                        },
                                        "id": 1084,
                                        "name": "Identifier",
                                        "src": "5035:4:4"
                                      }
                                    ],
                                    "id": 1085,
                                    "name": "MemberAccess",
                                    "src": "5035:7:4"
                                  }
                                ],
                                "id": 1086,
                                "name": "BinaryOperation",
                                "src": "5028:14:4"
                              }
                            ],
                            "id": 1087,
                            "name": "FunctionCall",
                            "src": "5020:23:4"
                          }
                        ],
                        "id": 1088,
                        "name": "FunctionCall",
                        "src": "5010:34:4"
                      }
                    ],
                    "id": 1089,
                    "name": "Return",
                    "src": "5003:41:4"
                  }
                ],
                "id": 1090,
                "name": "Block",
                "src": "4913:138:4"
              }
            ],
            "id": 1091,
            "name": "FunctionDefinition",
            "src": "4829:222:4"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "sqrt",
              "overrides": null,
              "scope": 1166,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "overrides": null,
                      "scope": 1165,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 1092,
                        "name": "UserDefinedTypeName",
                        "src": "5142:9:4"
                      }
                    ],
                    "id": 1093,
                    "name": "VariableDeclaration",
                    "src": "5142:21:4"
                  }
                ],
                "id": 1094,
                "name": "ParameterList",
                "src": "5141:23:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 1165,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct FixedPoint.uq112x112",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "uq112x112",
                          "referencedDeclaration": 614,
                          "type": "struct FixedPoint.uq112x112"
                        },
                        "id": 1095,
                        "name": "UserDefinedTypeName",
                        "src": "5188:9:4"
                      }
                    ],
                    "id": 1096,
                    "name": "VariableDeclaration",
                    "src": "5188:16:4"
                  }
                ],
                "id": 1097,
                "name": "ParameterList",
                "src": "5187:18:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_x",
                              "referencedDeclaration": 613,
                              "type": "uint224"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1093,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "value": "self"
                                },
                                "id": 1098,
                                "name": "Identifier",
                                "src": "5220:4:4"
                              }
                            ],
                            "id": 1099,
                            "name": "MemberAccess",
                            "src": "5220:7:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint144",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint144)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint144",
                                      "type": null
                                    },
                                    "id": 1100,
                                    "name": "ElementaryTypeName",
                                    "src": "5231:7:4"
                                  }
                                ],
                                "id": 1101,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5231:7:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "prefix": true,
                                  "type": "int_const -1"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1102,
                                    "name": "Literal",
                                    "src": "5240:1:4"
                                  }
                                ],
                                "id": 1103,
                                "name": "UnaryOperation",
                                "src": "5239:2:4"
                              }
                            ],
                            "id": 1104,
                            "name": "FunctionCall",
                            "src": "5231:11:4"
                          }
                        ],
                        "id": 1105,
                        "name": "BinaryOperation",
                        "src": "5220:22:4"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 1097
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": true,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "struct FixedPoint.uq112x112 memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 614,
                                      "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                                      "value": "uq112x112"
                                    },
                                    "id": 1106,
                                    "name": "Identifier",
                                    "src": "5265:9:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint224",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint224)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint224",
                                              "type": null
                                            },
                                            "id": 1107,
                                            "name": "ElementaryTypeName",
                                            "src": "5275:7:4"
                                          }
                                        ],
                                        "id": 1108,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "5275:7:4"
                                      },
                                      {
                                        "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": "sqrt",
                                              "referencedDeclaration": 488,
                                              "type": "function (uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 489,
                                                  "type": "type(library Babylonian)",
                                                  "value": "Babylonian"
                                                },
                                                "id": 1109,
                                                "name": "Identifier",
                                                "src": "5283:10:4"
                                              }
                                            ],
                                            "id": 1110,
                                            "name": "MemberAccess",
                                            "src": "5283:15:4"
                                          },
                                          {
                                            "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_uint224",
                                                          "typeString": "uint224"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint256",
                                                          "type": null
                                                        },
                                                        "id": 1111,
                                                        "name": "ElementaryTypeName",
                                                        "src": "5299:7:4"
                                                      }
                                                    ],
                                                    "id": 1112,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "5299:7:4"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "_x",
                                                      "referencedDeclaration": 613,
                                                      "type": "uint224"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 1093,
                                                          "type": "struct FixedPoint.uq112x112 memory",
                                                          "value": "self"
                                                        },
                                                        "id": 1113,
                                                        "name": "Identifier",
                                                        "src": "5307:4:4"
                                                      }
                                                    ],
                                                    "id": 1114,
                                                    "name": "MemberAccess",
                                                    "src": "5307:7:4"
                                                  }
                                                ],
                                                "id": 1115,
                                                "name": "FunctionCall",
                                                "src": "5299:16:4"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "313132",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 112",
                                                  "value": "112"
                                                },
                                                "id": 1116,
                                                "name": "Literal",
                                                "src": "5319:3:4"
                                              }
                                            ],
                                            "id": 1117,
                                            "name": "BinaryOperation",
                                            "src": "5299:23:4"
                                          }
                                        ],
                                        "id": 1118,
                                        "name": "FunctionCall",
                                        "src": "5283:40:4"
                                      }
                                    ],
                                    "id": 1119,
                                    "name": "FunctionCall",
                                    "src": "5275:49:4"
                                  }
                                ],
                                "id": 1120,
                                "name": "FunctionCall",
                                "src": "5265:60:4"
                              }
                            ],
                            "id": 1121,
                            "name": "Return",
                            "src": "5258:67:4"
                          }
                        ],
                        "id": 1122,
                        "name": "Block",
                        "src": "5244:92:4"
                      }
                    ],
                    "id": 1123,
                    "name": "IfStatement",
                    "src": "5216:120:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1125
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "safeShiftBits",
                          "overrides": null,
                          "scope": 1164,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 1124,
                            "name": "ElementaryTypeName",
                            "src": "5346:5:4"
                          }
                        ],
                        "id": 1125,
                        "name": "VariableDeclaration",
                        "src": "5346:19:4"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "323535",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 255",
                              "value": "255"
                            },
                            "id": 1126,
                            "name": "Literal",
                            "src": "5368:3:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint8",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint224",
                                      "typeString": "uint224"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mostSignificantBit",
                                  "referencedDeclaration": 605,
                                  "type": "function (uint256) pure returns (uint8)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 606,
                                      "type": "type(library BitMath)",
                                      "value": "BitMath"
                                    },
                                    "id": 1127,
                                    "name": "Identifier",
                                    "src": "5374:7:4"
                                  }
                                ],
                                "id": 1128,
                                "name": "MemberAccess",
                                "src": "5374:26:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "_x",
                                  "referencedDeclaration": 613,
                                  "type": "uint224"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1093,
                                      "type": "struct FixedPoint.uq112x112 memory",
                                      "value": "self"
                                    },
                                    "id": 1129,
                                    "name": "Identifier",
                                    "src": "5401:4:4"
                                  }
                                ],
                                "id": 1130,
                                "name": "MemberAccess",
                                "src": "5401:7:4"
                              }
                            ],
                            "id": 1131,
                            "name": "FunctionCall",
                            "src": "5374:35:4"
                          }
                        ],
                        "id": 1132,
                        "name": "BinaryOperation",
                        "src": "5368:41:4"
                      }
                    ],
                    "id": 1133,
                    "name": "VariableDeclarationStatement",
                    "src": "5346:63:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-=",
                          "type": "uint8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1125,
                              "type": "uint8",
                              "value": "safeShiftBits"
                            },
                            "id": 1134,
                            "name": "Identifier",
                            "src": "5419:13:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "%",
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1125,
                                  "type": "uint8",
                                  "value": "safeShiftBits"
                                },
                                "id": 1135,
                                "name": "Identifier",
                                "src": "5436:13:4"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "32",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 2",
                                  "value": "2"
                                },
                                "id": 1136,
                                "name": "Literal",
                                "src": "5452:1:4"
                              }
                            ],
                            "id": 1137,
                            "name": "BinaryOperation",
                            "src": "5436:17:4"
                          }
                        ],
                        "id": 1138,
                        "name": "Assignment",
                        "src": "5419:34:4"
                      }
                    ],
                    "id": 1139,
                    "name": "ExpressionStatement",
                    "src": "5419:34:4"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1097
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "struct FixedPoint.uq112x112 memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 614,
                              "type": "type(struct FixedPoint.uq112x112 storage pointer)",
                              "value": "uq112x112"
                            },
                            "id": 1140,
                            "name": "Identifier",
                            "src": "5470:9:4"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint224",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint224)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint224",
                                      "type": null
                                    },
                                    "id": 1141,
                                    "name": "ElementaryTypeName",
                                    "src": "5480:7:4"
                                  }
                                ],
                                "id": 1142,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5480:7:4"
                              },
                              {
                                "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"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sqrt",
                                          "referencedDeclaration": 488,
                                          "type": "function (uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 489,
                                              "type": "type(library Babylonian)",
                                              "value": "Babylonian"
                                            },
                                            "id": 1143,
                                            "name": "Identifier",
                                            "src": "5488:10:4"
                                          }
                                        ],
                                        "id": 1144,
                                        "name": "MemberAccess",
                                        "src": "5488:15:4"
                                      },
                                      {
                                        "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_uint224",
                                                      "typeString": "uint224"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint256",
                                                      "type": null
                                                    },
                                                    "id": 1145,
                                                    "name": "ElementaryTypeName",
                                                    "src": "5504:7:4"
                                                  }
                                                ],
                                                "id": 1146,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "5504:7:4"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "_x",
                                                  "referencedDeclaration": 613,
                                                  "type": "uint224"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1093,
                                                      "type": "struct FixedPoint.uq112x112 memory",
                                                      "value": "self"
                                                    },
                                                    "id": 1147,
                                                    "name": "Identifier",
                                                    "src": "5512:4:4"
                                                  }
                                                ],
                                                "id": 1148,
                                                "name": "MemberAccess",
                                                "src": "5512:7:4"
                                              }
                                            ],
                                            "id": 1149,
                                            "name": "FunctionCall",
                                            "src": "5504:16:4"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1125,
                                              "type": "uint8",
                                              "value": "safeShiftBits"
                                            },
                                            "id": 1150,
                                            "name": "Identifier",
                                            "src": "5524:13:4"
                                          }
                                        ],
                                        "id": 1151,
                                        "name": "BinaryOperation",
                                        "src": "5504:33:4"
                                      }
                                    ],
                                    "id": 1152,
                                    "name": "FunctionCall",
                                    "src": "5488:50:4"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "/",
                                          "type": "uint8"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint8"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "-",
                                                  "type": "uint8"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "hexvalue": "313132",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "subdenomination": null,
                                                      "token": "number",
                                                      "type": "int_const 112",
                                                      "value": "112"
                                                    },
                                                    "id": 1153,
                                                    "name": "Literal",
                                                    "src": "5544:3:4"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1125,
                                                      "type": "uint8",
                                                      "value": "safeShiftBits"
                                                    },
                                                    "id": 1154,
                                                    "name": "Identifier",
                                                    "src": "5550:13:4"
                                                  }
                                                ],
                                                "id": 1155,
                                                "name": "BinaryOperation",
                                                "src": "5544:19:4"
                                              }
                                            ],
                                            "id": 1156,
                                            "name": "TupleExpression",
                                            "src": "5543:21:4"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "32",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 2",
                                              "value": "2"
                                            },
                                            "id": 1157,
                                            "name": "Literal",
                                            "src": "5567:1:4"
                                          }
                                        ],
                                        "id": 1158,
                                        "name": "BinaryOperation",
                                        "src": "5543:25:4"
                                      }
                                    ],
                                    "id": 1159,
                                    "name": "TupleExpression",
                                    "src": "5542:27:4"
                                  }
                                ],
                                "id": 1160,
                                "name": "BinaryOperation",
                                "src": "5488:81:4"
                              }
                            ],
                            "id": 1161,
                            "name": "FunctionCall",
                            "src": "5480:90:4"
                          }
                        ],
                        "id": 1162,
                        "name": "FunctionCall",
                        "src": "5470:101:4"
                      }
                    ],
                    "id": 1163,
                    "name": "Return",
                    "src": "5463:108:4"
                  }
                ],
                "id": 1164,
                "name": "Block",
                "src": "5206:372:4"
              }
            ],
            "id": 1165,
            "name": "FunctionDefinition",
            "src": "5128:450:4"
          }
        ],
        "id": 1166,
        "name": "ContractDefinition",
        "src": "251:5329:4"
      }
    ],
    "id": 1167,
    "name": "SourceUnit",
    "src": "45:5536:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-07-08T17:04:13.713Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}