{
  "contractName": "BigDiv",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Results may be off by 1 + 0.000001% for 2x1 calls and 2 + 0.00001% for 2x2 calls. Do not use if your contract expects very small result values to be accurate.\",\"methods\":{},\"stateVariables\":{\"MAX_BEFORE_SQUARE\":{\"details\":\"When multiplying 2 terms <= this value the result won't overflow\"},\"MAX_ERROR\":{\"details\":\"The max error target is off by 1 plus up to 0.000001% error for bigDiv2x1 and that `* 2` for bigDiv2x2\"},\"MAX_ERROR_BEFORE_DIV\":{\"details\":\"A larger error threshold to use when multiple rounding errors may apply\"},\"MAX_UINT\":{\"details\":\"The max possible value\"}},\"title\":\"Reduces the size of terms before multiplication, to avoid an overflow, and then restores the proper size after division.\"},\"userdoc\":{\"methods\":{},\"notice\":\"This effectively allows us to overflow values in the numerator and/or denominator of a fraction, so long as the end result does not overflow as well.\"}},\"settings\":{\"compilationTarget\":{\"project:/contracts/math/BigDiv.sol\":\"BigDiv\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":2000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"project:/contracts/math/BigDiv.sol\":{\"keccak256\":\"0x2b9464c57ca4ed472debc814d6d5ddea6fc63e7c932220b21bd85f43b68d3861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9a1e15fb29e6985de6ee17002c3161aed478804a7e5c5d783a7dfbe7cf7454d\",\"dweb:/ipfs/QmWH4Loq4uujmJGryQGAPgR4r8yA1b99QwMo3dYkd29dEe\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220aee47ebf61458022aa0a42bb0b4471fafba67cd8870a9daf98c080f106f7c50f64736f6c634300060a0033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220aee47ebf61458022aa0a42bb0b4471fafba67cd8870a9daf98c080f106f7c50f64736f6c634300060a0033",
  "immutableReferences": {},
  "sourceMap": "587:6272:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "587:6272:11:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\n\nimport '@openzeppelin/contracts/math/SafeMath.sol';\n\n/**\n * @title Reduces the size of terms before multiplication, to avoid an overflow, and then\n * restores the proper size after division.\n * @notice This effectively allows us to overflow values in the numerator and/or denominator\n * of a fraction, so long as the end result does not overflow as well.\n * @dev Results may be off by 1 + 0.000001% for 2x1 calls and 2 + 0.00001% for 2x2 calls.\n * Do not use if your contract expects very small result values to be accurate.\n */\nlibrary BigDiv\n{\n  using SafeMath for uint256;\n\n  /// @dev The max possible value\n  uint256 private constant MAX_UINT = 2**256 - 1;\n\n  /// @dev When multiplying 2 terms <= this value the result won't overflow\n  uint256 private constant MAX_BEFORE_SQUARE = 2**128 - 1;\n\n  /// @dev The max error target is off by 1 plus up to 0.000001% error\n  /// for bigDiv2x1 and that `* 2` for bigDiv2x2\n  uint256 private constant MAX_ERROR = 100000000;\n\n  /// @dev A larger error threshold to use when multiple rounding errors may apply\n  uint256 private constant MAX_ERROR_BEFORE_DIV = MAX_ERROR * 2;\n\n  /**\n   * @notice Returns the approx result of `a * b / d` so long as the result is <= MAX_UINT\n   * @param _numA the first numerator term\n   * @param _numB the second numerator term\n   * @param _den the denominator\n   * @return the approx result with up to off by 1 + MAX_ERROR, rounding down if needed\n   */\n  function bigDiv2x1(\n    uint256 _numA,\n    uint256 _numB,\n    uint256 _den\n  ) internal pure\n    returns(uint256)\n  {\n    if(_numA == 0 || _numB == 0)\n    {\n      // would div by 0 or underflow if we don't special case 0\n      return 0;\n    }\n\n    uint256 value;\n\n    if(MAX_UINT / _numA >= _numB)\n    {\n      // a*b does not overflow, return exact math\n      value = _numA * _numB;\n      value /= _den;\n      return value;\n    }\n\n    // Sort numerators\n    uint256 numMax = _numB;\n    uint256 numMin = _numA;\n    if(_numA > _numB)\n    {\n      numMax = _numA;\n      numMin = _numB;\n    }\n\n    value = numMax / _den;\n    if(value > MAX_ERROR)\n    {\n      // _den is small enough to be MAX_ERROR or better w/o a factor\n      value = value.mul(numMin);\n      return value;\n    }\n\n    // formula = ((a / f) * b) / (d / f)\n    // factor >= a / sqrt(MAX) * (b / sqrt(MAX))\n    uint256 factor = numMin - 1;\n    factor /= MAX_BEFORE_SQUARE;\n    factor += 1;\n    uint256 temp = numMax - 1;\n    temp /= MAX_BEFORE_SQUARE;\n    temp += 1;\n    if(MAX_UINT / factor >= temp)\n    {\n      factor *= temp;\n      value = numMax / factor;\n      if(value > MAX_ERROR_BEFORE_DIV)\n      {\n        value = value.mul(numMin);\n        temp = _den - 1;\n        temp /= factor;\n        temp = temp.add(1);\n        value /= temp;\n        return value;\n      }\n    }\n\n    // formula: (a / (d / f)) * (b / f)\n    // factor: b / sqrt(MAX)\n    factor = numMin - 1;\n    factor /= MAX_BEFORE_SQUARE;\n    factor += 1;\n    value = numMin / factor;\n    temp = _den - 1;\n    temp /= factor;\n    temp += 1;\n    temp = numMax / temp;\n    value = value.mul(temp);\n    return value;\n  }\n\n  /**\n   * @notice Returns the approx result of `a * b / d` so long as the result is <= MAX_UINT\n   * @param _numA the first numerator term\n   * @param _numB the second numerator term\n   * @param _den the denominator\n   * @return the approx result with up to off by 1 + MAX_ERROR, rounding down if needed\n   * @dev roundUp is implemented by first rounding down and then adding the max error to the result\n   */\n  function bigDiv2x1RoundUp(\n    uint256 _numA,\n    uint256 _numB,\n    uint256 _den\n  ) internal pure\n    returns(uint256)\n  {\n    // first get the rounded down result\n    uint256 value = bigDiv2x1(_numA, _numB, _den);\n\n    if(value == 0)\n    {\n      // when the value rounds down to 0, assume up to an off by 1 error\n      return 1;\n    }\n\n    // round down has a max error of MAX_ERROR, add that to the result\n    // for a round up error of <= MAX_ERROR\n    uint256 temp = value - 1;\n    temp /= MAX_ERROR;\n    temp += 1;\n    if(MAX_UINT - value < temp)\n    {\n      // value + error would overflow, return MAX\n      return MAX_UINT;\n    }\n\n    value += temp;\n\n    return value;\n  }\n\n  /**\n   * @notice Returns the approx result of `a * b / (c * d)` so long as the result is <= MAX_UINT\n   * @param _numA the first numerator term\n   * @param _numB the second numerator term\n   * @param _denA the first denominator term\n   * @param _denB the second denominator term\n   * @return the approx result with up to off by 2 + MAX_ERROR*10 error, rounding down if needed\n   * @dev this uses bigDiv2x1 and adds additional rounding error so the max error of this\n   * formula is larger\n   */\n  function bigDiv2x2(\n    uint256 _numA,\n    uint256 _numB,\n    uint256 _denA,\n    uint256 _denB\n  ) internal pure\n    returns (uint256)\n  {\n    if(MAX_UINT / _denA >= _denB)\n    {\n      // denA*denB does not overflow, use bigDiv2x1 instead\n      return bigDiv2x1(_numA, _numB, _denA * _denB);\n    }\n\n    if(_numA == 0 || _numB == 0)\n    {\n      // would div by 0 or underflow if we don't special case 0\n      return 0;\n    }\n\n    // Sort denominators\n    uint256 denMax = _denB;\n    uint256 denMin = _denA;\n    if(_denA > _denB)\n    {\n      denMax = _denA;\n      denMin = _denB;\n    }\n\n    uint256 value;\n\n    if(MAX_UINT / _numA >= _numB)\n    {\n      // a*b does not overflow, use `a / d / c`\n      value = _numA * _numB;\n      value /= denMin;\n      value /= denMax;\n      return value;\n    }\n\n    // `ab / cd` where both `ab` and `cd` would overflow\n\n    // Sort numerators\n    uint256 numMax = _numB;\n    uint256 numMin = _numA;\n    if(_numA > _numB)\n    {\n      numMax = _numA;\n      numMin = _numB;\n    }\n\n    // formula = (a/d) * b / c\n    uint256 temp = numMax / denMin;\n    if(temp > MAX_ERROR_BEFORE_DIV)\n    {\n      return bigDiv2x1(temp, numMin, denMax);\n    }\n\n    // formula: ((a/f) * b) / d then either * f / c or / c * f\n    // factor >= a / sqrt(MAX) * (b / sqrt(MAX))\n    uint256 factor = numMin - 1;\n    factor /= MAX_BEFORE_SQUARE;\n    factor += 1;\n    temp = numMax - 1;\n    temp /= MAX_BEFORE_SQUARE;\n    temp += 1;\n    if(MAX_UINT / factor >= temp)\n    {\n      factor *= temp;\n\n      value = numMax / factor;\n      if(value > MAX_ERROR_BEFORE_DIV)\n      {\n        value = value.mul(numMin);\n        value /= denMin;\n        if(value > 0 && MAX_UINT / value >= factor)\n        {\n          value *= factor;\n          value /= denMax;\n          return value;\n        }\n      }\n    }\n\n    // formula: (a/f) * b / ((c*d)/f)\n    // factor >= c / sqrt(MAX) * (d / sqrt(MAX))\n    factor = denMin;\n    factor /= MAX_BEFORE_SQUARE;\n    temp = denMax;\n    // + 1 here prevents overflow of factor*temp\n    temp /= MAX_BEFORE_SQUARE + 1;\n    factor *= temp;\n    return bigDiv2x1(numMax / factor, numMin, MAX_UINT);\n  }\n}",
  "sourcePath": "/home/circleci/repo/contracts/math/BigDiv.sol",
  "ast": {
    "absolutePath": "project:/contracts/math/BigDiv.sol",
    "exportedSymbols": {
      "BigDiv": [
        2789
      ]
    },
    "id": 2790,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2246,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:11"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 2247,
        "nodeType": "ImportDirective",
        "scope": 2790,
        "sourceUnit": 355,
        "src": "58:51:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 2248,
          "nodeType": "StructuredDocumentation",
          "src": "111:475:11",
          "text": " @title Reduces the size of terms before multiplication, to avoid an overflow, and then\n restores the proper size after division.\n @notice This effectively allows us to overflow values in the numerator and/or denominator\n of a fraction, so long as the end result does not overflow as well.\n @dev Results may be off by 1 + 0.000001% for 2x1 calls and 2 + 0.00001% for 2x2 calls.\n Do not use if your contract expects very small result values to be accurate."
        },
        "fullyImplemented": true,
        "id": 2789,
        "linearizedBaseContracts": [
          2789
        ],
        "name": "BigDiv",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 2251,
            "libraryName": {
              "contractScope": null,
              "id": 2249,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 354,
              "src": "612:8:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$354",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "606:27:11",
            "typeName": {
              "id": 2250,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "625:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "documentation": {
              "id": 2252,
              "nodeType": "StructuredDocumentation",
              "src": "637:31:11",
              "text": "@dev The max possible value"
            },
            "id": 2259,
            "mutability": "constant",
            "name": "MAX_UINT",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2789,
            "src": "671:46:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 2253,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "671:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                "typeString": "int_const 1157...(70 digits omitted)...9935"
              },
              "id": 2258,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "commonType": {
                  "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                  "typeString": "int_const 1157...(70 digits omitted)...9936"
                },
                "id": 2256,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "argumentTypes": null,
                  "hexValue": "32",
                  "id": 2254,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "707:1:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "argumentTypes": null,
                  "hexValue": "323536",
                  "id": 2255,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "710:3:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_256_by_1",
                    "typeString": "int_const 256"
                  },
                  "value": "256"
                },
                "src": "707:6:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                  "typeString": "int_const 1157...(70 digits omitted)...9936"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "-",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "31",
                "id": 2257,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "716:1:11",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "src": "707:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                "typeString": "int_const 1157...(70 digits omitted)...9935"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2260,
              "nodeType": "StructuredDocumentation",
              "src": "722:73:11",
              "text": "@dev When multiplying 2 terms <= this value the result won't overflow"
            },
            "id": 2267,
            "mutability": "constant",
            "name": "MAX_BEFORE_SQUARE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2789,
            "src": "798:55:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 2261,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "798:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                "typeString": "int_const 3402...(31 digits omitted)...1455"
              },
              "id": 2266,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "commonType": {
                  "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                  "typeString": "int_const 3402...(31 digits omitted)...1456"
                },
                "id": 2264,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "argumentTypes": null,
                  "hexValue": "32",
                  "id": 2262,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "843:1:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "argumentTypes": null,
                  "hexValue": "313238",
                  "id": 2263,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "846:3:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_128_by_1",
                    "typeString": "int_const 128"
                  },
                  "value": "128"
                },
                "src": "843:6:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                  "typeString": "int_const 3402...(31 digits omitted)...1456"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "-",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "31",
                "id": 2265,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "852:1:11",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "src": "843:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                "typeString": "int_const 3402...(31 digits omitted)...1455"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2268,
              "nodeType": "StructuredDocumentation",
              "src": "858:117:11",
              "text": "@dev The max error target is off by 1 plus up to 0.000001% error\n for bigDiv2x1 and that `* 2` for bigDiv2x2"
            },
            "id": 2271,
            "mutability": "constant",
            "name": "MAX_ERROR",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2789,
            "src": "978:46:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 2269,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "978:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313030303030303030",
              "id": 2270,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1015:9:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000000_by_1",
                "typeString": "int_const 100000000"
              },
              "value": "100000000"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2272,
              "nodeType": "StructuredDocumentation",
              "src": "1029:80:11",
              "text": "@dev A larger error threshold to use when multiple rounding errors may apply"
            },
            "id": 2277,
            "mutability": "constant",
            "name": "MAX_ERROR_BEFORE_DIV",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2789,
            "src": "1112:61:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 2273,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1112:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 2276,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "id": 2274,
                "name": "MAX_ERROR",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 2271,
                "src": "1160:9:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "32",
                "id": 2275,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1172:1:11",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "2"
              },
              "src": "1160:13:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 2492,
              "nodeType": "Block",
              "src": "1605:1528:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2289,
                        "name": "_numA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2280,
                        "src": "1614:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1623:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1614:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2292,
                        "name": "_numB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2282,
                        "src": "1628:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2293,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1637:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1628:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1614:24:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2299,
                  "nodeType": "IfStatement",
                  "src": "1611:120:11",
                  "trueBody": {
                    "id": 2298,
                    "nodeType": "Block",
                    "src": "1644:87:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1723:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2288,
                        "id": 2297,
                        "nodeType": "Return",
                        "src": "1716:8:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2301,
                      "mutability": "mutable",
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2492,
                      "src": "1737:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2300,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1737:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2302,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1737:13:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2303,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "1760:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2304,
                        "name": "_numA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2280,
                        "src": "1771:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1760:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2306,
                      "name": "_numB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2282,
                      "src": "1780:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1760:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2321,
                  "nodeType": "IfStatement",
                  "src": "1757:161:11",
                  "trueBody": {
                    "id": 2320,
                    "nodeType": "Block",
                    "src": "1791:127:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2308,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2301,
                            "src": "1849:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2309,
                              "name": "_numA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2280,
                              "src": "1857:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2310,
                              "name": "_numB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2282,
                              "src": "1865:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1857:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1849:21:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2313,
                        "nodeType": "ExpressionStatement",
                        "src": "1849:21:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2314,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2301,
                            "src": "1878:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2315,
                            "name": "_den",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2284,
                            "src": "1887:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1878:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2317,
                        "nodeType": "ExpressionStatement",
                        "src": "1878:13:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2318,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2301,
                          "src": "1906:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2288,
                        "id": 2319,
                        "nodeType": "Return",
                        "src": "1899:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2323
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2323,
                      "mutability": "mutable",
                      "name": "numMax",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2492,
                      "src": "1947:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2322,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1947:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2325,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2324,
                    "name": "_numB",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2282,
                    "src": "1964:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1947:22:11"
                },
                {
                  "assignments": [
                    2327
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2327,
                      "mutability": "mutable",
                      "name": "numMin",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2492,
                      "src": "1975:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2326,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1975:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2329,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2328,
                    "name": "_numA",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2280,
                    "src": "1992:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1975:22:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2330,
                      "name": "_numA",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2280,
                      "src": "2006:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2331,
                      "name": "_numB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2282,
                      "src": "2014:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2006:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2342,
                  "nodeType": "IfStatement",
                  "src": "2003:73:11",
                  "trueBody": {
                    "id": 2341,
                    "nodeType": "Block",
                    "src": "2025:51:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2333,
                            "name": "numMax",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2323,
                            "src": "2033:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2334,
                            "name": "_numA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2280,
                            "src": "2042:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2033:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2336,
                        "nodeType": "ExpressionStatement",
                        "src": "2033:14:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2337,
                            "name": "numMin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2327,
                            "src": "2055:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2338,
                            "name": "_numB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2282,
                            "src": "2064:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2055:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2340,
                        "nodeType": "ExpressionStatement",
                        "src": "2055:14:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2343,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2301,
                      "src": "2082:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2344,
                        "name": "numMax",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2323,
                        "src": "2090:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2345,
                        "name": "_den",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2284,
                        "src": "2099:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2090:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2082:21:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2348,
                  "nodeType": "ExpressionStatement",
                  "src": "2082:21:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2349,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2301,
                      "src": "2112:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2350,
                      "name": "MAX_ERROR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2271,
                      "src": "2120:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2112:17:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2362,
                  "nodeType": "IfStatement",
                  "src": "2109:155:11",
                  "trueBody": {
                    "id": 2361,
                    "nodeType": "Block",
                    "src": "2135:129:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2352,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2301,
                            "src": "2212:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2355,
                                "name": "numMin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2327,
                                "src": "2230:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2353,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2301,
                                "src": "2220:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 237,
                              "src": "2220:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2220:17:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2212:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2358,
                        "nodeType": "ExpressionStatement",
                        "src": "2212:25:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2359,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2301,
                          "src": "2252:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2288,
                        "id": 2360,
                        "nodeType": "Return",
                        "src": "2245:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2364
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2364,
                      "mutability": "mutable",
                      "name": "factor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2492,
                      "src": "2360:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2363,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2360:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2368,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2365,
                      "name": "numMin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2327,
                      "src": "2377:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2386:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2377:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2360:27:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2369,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2364,
                      "src": "2393:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2370,
                      "name": "MAX_BEFORE_SQUARE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2267,
                      "src": "2403:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2393:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2372,
                  "nodeType": "ExpressionStatement",
                  "src": "2393:27:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2373,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2364,
                      "src": "2426:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2436:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2426:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2376,
                  "nodeType": "ExpressionStatement",
                  "src": "2426:11:11"
                },
                {
                  "assignments": [
                    2378
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2378,
                      "mutability": "mutable",
                      "name": "temp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2492,
                      "src": "2443:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2377,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2443:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2382,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2379,
                      "name": "numMax",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2323,
                      "src": "2458:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2380,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2467:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2458:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2443:25:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2383,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "2474:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2384,
                      "name": "MAX_BEFORE_SQUARE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2267,
                      "src": "2482:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2474:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2386,
                  "nodeType": "ExpressionStatement",
                  "src": "2474:25:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2387,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "2505:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2513:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2505:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2390,
                  "nodeType": "ExpressionStatement",
                  "src": "2505:9:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2393,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2391,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "2523:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2392,
                        "name": "factor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2364,
                        "src": "2534:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2523:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2394,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "2544:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2523:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2442,
                  "nodeType": "IfStatement",
                  "src": "2520:306:11",
                  "trueBody": {
                    "id": 2441,
                    "nodeType": "Block",
                    "src": "2554:272:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2396,
                            "name": "factor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2364,
                            "src": "2562:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2397,
                            "name": "temp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2378,
                            "src": "2572:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2562:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2399,
                        "nodeType": "ExpressionStatement",
                        "src": "2562:14:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2400,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2301,
                            "src": "2584:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2401,
                              "name": "numMax",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2323,
                              "src": "2592:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2402,
                              "name": "factor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2364,
                              "src": "2601:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2592:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2584:23:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2405,
                        "nodeType": "ExpressionStatement",
                        "src": "2584:23:11"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2406,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2301,
                            "src": "2618:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2407,
                            "name": "MAX_ERROR_BEFORE_DIV",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2277,
                            "src": "2626:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2618:28:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2440,
                        "nodeType": "IfStatement",
                        "src": "2615:205:11",
                        "trueBody": {
                          "id": 2439,
                          "nodeType": "Block",
                          "src": "2654:166:11",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2414,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2409,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2301,
                                  "src": "2664:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2412,
                                      "name": "numMin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2327,
                                      "src": "2682:6:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2410,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2301,
                                      "src": "2672:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2411,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 237,
                                    "src": "2672:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2413,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2672:17:11",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2664:25:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2415,
                              "nodeType": "ExpressionStatement",
                              "src": "2664:25:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2420,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2416,
                                  "name": "temp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2378,
                                  "src": "2699:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2419,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2417,
                                    "name": "_den",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2284,
                                    "src": "2706:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2418,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2713:1:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "2706:8:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2699:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2421,
                              "nodeType": "ExpressionStatement",
                              "src": "2699:15:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2422,
                                  "name": "temp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2378,
                                  "src": "2724:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "/=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2423,
                                  "name": "factor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2364,
                                  "src": "2732:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2724:14:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2425,
                              "nodeType": "ExpressionStatement",
                              "src": "2724:14:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2431,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2426,
                                  "name": "temp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2378,
                                  "src": "2748:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 2429,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2764:1:11",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2427,
                                      "name": "temp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2378,
                                      "src": "2755:4:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2428,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 181,
                                    "src": "2755:8:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2430,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2755:11:11",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2748:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2432,
                              "nodeType": "ExpressionStatement",
                              "src": "2748:18:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2435,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2433,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2301,
                                  "src": "2776:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "/=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2434,
                                  "name": "temp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2378,
                                  "src": "2785:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2776:13:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2436,
                              "nodeType": "ExpressionStatement",
                              "src": "2776:13:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2437,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2301,
                                "src": "2806:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2288,
                              "id": 2438,
                              "nodeType": "Return",
                              "src": "2799:12:11"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2443,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2364,
                      "src": "2901:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2444,
                        "name": "numMin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2327,
                        "src": "2910:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 2445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2919:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "2910:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2901:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2448,
                  "nodeType": "ExpressionStatement",
                  "src": "2901:19:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2449,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2364,
                      "src": "2926:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2450,
                      "name": "MAX_BEFORE_SQUARE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2267,
                      "src": "2936:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2926:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2452,
                  "nodeType": "ExpressionStatement",
                  "src": "2926:27:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2453,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2364,
                      "src": "2959:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2969:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2959:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2456,
                  "nodeType": "ExpressionStatement",
                  "src": "2959:11:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2457,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2301,
                      "src": "2976:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2458,
                        "name": "numMin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2327,
                        "src": "2984:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2459,
                        "name": "factor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2364,
                        "src": "2993:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2984:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2976:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2462,
                  "nodeType": "ExpressionStatement",
                  "src": "2976:23:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2463,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "3005:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2466,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2464,
                        "name": "_den",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2284,
                        "src": "3012:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 2465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3019:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3012:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3005:15:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2468,
                  "nodeType": "ExpressionStatement",
                  "src": "3005:15:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2469,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "3026:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2470,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2364,
                      "src": "3034:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3026:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2472,
                  "nodeType": "ExpressionStatement",
                  "src": "3026:14:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2473,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "3046:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3054:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "3046:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2476,
                  "nodeType": "ExpressionStatement",
                  "src": "3046:9:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2477,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2378,
                      "src": "3061:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2478,
                        "name": "numMax",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2323,
                        "src": "3068:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2479,
                        "name": "temp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2378,
                        "src": "3077:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3068:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3061:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2482,
                  "nodeType": "ExpressionStatement",
                  "src": "3061:20:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2483,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2301,
                      "src": "3087:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2486,
                          "name": "temp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2378,
                          "src": "3105:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2484,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2301,
                          "src": "3095:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 237,
                        "src": "3095:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2487,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3095:15:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3087:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2489,
                  "nodeType": "ExpressionStatement",
                  "src": "3087:23:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2490,
                    "name": "value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2301,
                    "src": "3123:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2288,
                  "id": 2491,
                  "nodeType": "Return",
                  "src": "3116:12:11"
                }
              ]
            },
            "documentation": {
              "id": 2278,
              "nodeType": "StructuredDocumentation",
              "src": "1178:308:11",
              "text": " @notice Returns the approx result of `a * b / d` so long as the result is <= MAX_UINT\n @param _numA the first numerator term\n @param _numB the second numerator term\n @param _den the denominator\n @return the approx result with up to off by 1 + MAX_ERROR, rounding down if needed"
            },
            "id": 2493,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bigDiv2x1",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2280,
                  "mutability": "mutable",
                  "name": "_numA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2493,
                  "src": "1513:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1513:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2282,
                  "mutability": "mutable",
                  "name": "_numB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2493,
                  "src": "1532:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2281,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1532:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2284,
                  "mutability": "mutable",
                  "name": "_den",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2493,
                  "src": "1551:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1551:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1507:60:11"
            },
            "returnParameters": {
              "id": 2288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2287,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2493,
                  "src": "1594:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1594:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1593:9:11"
            },
            "scope": 2789,
            "src": "1489:1644:11",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2549,
              "nodeType": "Block",
              "src": "3671:558:11",
              "statements": [
                {
                  "assignments": [
                    2506
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2506,
                      "mutability": "mutable",
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2549,
                      "src": "3718:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2505,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3718:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2512,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2508,
                        "name": "_numA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2496,
                        "src": "3744:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2509,
                        "name": "_numB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2498,
                        "src": "3751:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2510,
                        "name": "_den",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2500,
                        "src": "3758:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2507,
                      "name": "bigDiv2x1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2493,
                      "src": "3734:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3734:29:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3718:45:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2513,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2506,
                      "src": "3773:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3782:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3773:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2519,
                  "nodeType": "IfStatement",
                  "src": "3770:115:11",
                  "trueBody": {
                    "id": 2518,
                    "nodeType": "Block",
                    "src": "3789:96:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3877:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "functionReturnParameters": 2504,
                        "id": 2517,
                        "nodeType": "Return",
                        "src": "3870:8:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2521,
                      "mutability": "mutable",
                      "name": "temp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2549,
                      "src": "4006:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2520,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4006:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2525,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2522,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2506,
                      "src": "4021:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2523,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4029:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "4021:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4006:24:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2526,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2521,
                      "src": "4036:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2527,
                      "name": "MAX_ERROR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2271,
                      "src": "4044:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4036:17:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2529,
                  "nodeType": "ExpressionStatement",
                  "src": "4036:17:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2530,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2521,
                      "src": "4059:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4067:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "4059:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2533,
                  "nodeType": "ExpressionStatement",
                  "src": "4059:9:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2534,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "4077:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2535,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2506,
                        "src": "4088:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4077:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2537,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2521,
                      "src": "4096:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4077:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2542,
                  "nodeType": "IfStatement",
                  "src": "4074:112:11",
                  "trueBody": {
                    "id": 2541,
                    "nodeType": "Block",
                    "src": "4106:80:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2539,
                          "name": "MAX_UINT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2259,
                          "src": "4171:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2504,
                        "id": 2540,
                        "nodeType": "Return",
                        "src": "4164:15:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2543,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2506,
                      "src": "4192:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2544,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2521,
                      "src": "4201:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4192:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2546,
                  "nodeType": "ExpressionStatement",
                  "src": "4192:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2547,
                    "name": "value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2506,
                    "src": "4219:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2504,
                  "id": 2548,
                  "nodeType": "Return",
                  "src": "4212:12:11"
                }
              ]
            },
            "documentation": {
              "id": 2494,
              "nodeType": "StructuredDocumentation",
              "src": "3137:408:11",
              "text": " @notice Returns the approx result of `a * b / d` so long as the result is <= MAX_UINT\n @param _numA the first numerator term\n @param _numB the second numerator term\n @param _den the denominator\n @return the approx result with up to off by 1 + MAX_ERROR, rounding down if needed\n @dev roundUp is implemented by first rounding down and then adding the max error to the result"
            },
            "id": 2550,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bigDiv2x1RoundUp",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2501,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2496,
                  "mutability": "mutable",
                  "name": "_numA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2550,
                  "src": "3579:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2495,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3579:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2498,
                  "mutability": "mutable",
                  "name": "_numB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2550,
                  "src": "3598:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2497,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3598:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2500,
                  "mutability": "mutable",
                  "name": "_den",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2550,
                  "src": "3617:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2499,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3617:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3573:60:11"
            },
            "returnParameters": {
              "id": 2504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2503,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2550,
                  "src": "3660:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2502,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3660:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3659:9:11"
            },
            "scope": 2789,
            "src": "3548:681:11",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2787,
              "nodeType": "Block",
              "src": "4867:1990:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2566,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2564,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "4876:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2565,
                        "name": "_denA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2557,
                        "src": "4887:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4876:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2567,
                      "name": "_denB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2559,
                      "src": "4896:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4876:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2578,
                  "nodeType": "IfStatement",
                  "src": "4873:154:11",
                  "trueBody": {
                    "id": 2577,
                    "nodeType": "Block",
                    "src": "4907:120:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2570,
                              "name": "_numA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2553,
                              "src": "4992:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2571,
                              "name": "_numB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2555,
                              "src": "4999:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 2572,
                                "name": "_denA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2557,
                                "src": "5006:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 2573,
                                "name": "_denB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2559,
                                "src": "5014:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5006:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2569,
                            "name": "bigDiv2x1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2493,
                            "src": "4982:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4982:38:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2563,
                        "id": 2576,
                        "nodeType": "Return",
                        "src": "4975:45:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2579,
                        "name": "_numA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2553,
                        "src": "5036:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5045:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5036:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2582,
                        "name": "_numB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "5050:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5059:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5050:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5036:24:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2589,
                  "nodeType": "IfStatement",
                  "src": "5033:120:11",
                  "trueBody": {
                    "id": 2588,
                    "nodeType": "Block",
                    "src": "5066:87:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5145:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2563,
                        "id": 2587,
                        "nodeType": "Return",
                        "src": "5138:8:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2591
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2591,
                      "mutability": "mutable",
                      "name": "denMax",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "5184:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2590,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5184:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2593,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2592,
                    "name": "_denB",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2559,
                    "src": "5201:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5184:22:11"
                },
                {
                  "assignments": [
                    2595
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2595,
                      "mutability": "mutable",
                      "name": "denMin",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "5212:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2594,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5212:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2597,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2596,
                    "name": "_denA",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2557,
                    "src": "5229:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5212:22:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2598,
                      "name": "_denA",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2557,
                      "src": "5243:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2599,
                      "name": "_denB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2559,
                      "src": "5251:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5243:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2610,
                  "nodeType": "IfStatement",
                  "src": "5240:73:11",
                  "trueBody": {
                    "id": 2609,
                    "nodeType": "Block",
                    "src": "5262:51:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2601,
                            "name": "denMax",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2591,
                            "src": "5270:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2602,
                            "name": "_denA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2557,
                            "src": "5279:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5270:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2604,
                        "nodeType": "ExpressionStatement",
                        "src": "5270:14:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2605,
                            "name": "denMin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2595,
                            "src": "5292:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2606,
                            "name": "_denB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2559,
                            "src": "5301:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5292:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2608,
                        "nodeType": "ExpressionStatement",
                        "src": "5292:14:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2612
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2612,
                      "mutability": "mutable",
                      "name": "value",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "5319:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2611,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5319:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2613,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5319:13:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2616,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2614,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "5342:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2615,
                        "name": "_numA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2553,
                        "src": "5353:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5342:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2617,
                      "name": "_numB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2555,
                      "src": "5362:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5342:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2636,
                  "nodeType": "IfStatement",
                  "src": "5339:184:11",
                  "trueBody": {
                    "id": 2635,
                    "nodeType": "Block",
                    "src": "5373:150:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2619,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2612,
                            "src": "5429:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2622,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2620,
                              "name": "_numA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2553,
                              "src": "5437:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2621,
                              "name": "_numB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2555,
                              "src": "5445:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5437:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5429:21:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2624,
                        "nodeType": "ExpressionStatement",
                        "src": "5429:21:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2625,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2612,
                            "src": "5458:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2626,
                            "name": "denMin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2595,
                            "src": "5467:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5458:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2628,
                        "nodeType": "ExpressionStatement",
                        "src": "5458:15:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2629,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2612,
                            "src": "5481:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "/=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2630,
                            "name": "denMax",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2591,
                            "src": "5490:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5481:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2632,
                        "nodeType": "ExpressionStatement",
                        "src": "5481:15:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2633,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2612,
                          "src": "5511:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2563,
                        "id": 2634,
                        "nodeType": "Return",
                        "src": "5504:12:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2638
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2638,
                      "mutability": "mutable",
                      "name": "numMax",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "5610:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2637,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5610:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2640,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2639,
                    "name": "_numB",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2555,
                    "src": "5627:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5610:22:11"
                },
                {
                  "assignments": [
                    2642
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2642,
                      "mutability": "mutable",
                      "name": "numMin",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "5638:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2641,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5638:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2644,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 2643,
                    "name": "_numA",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2553,
                    "src": "5655:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5638:22:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2645,
                      "name": "_numA",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2553,
                      "src": "5669:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2646,
                      "name": "_numB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2555,
                      "src": "5677:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5669:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2657,
                  "nodeType": "IfStatement",
                  "src": "5666:73:11",
                  "trueBody": {
                    "id": 2656,
                    "nodeType": "Block",
                    "src": "5688:51:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2648,
                            "name": "numMax",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2638,
                            "src": "5696:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2649,
                            "name": "_numA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2553,
                            "src": "5705:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5696:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2651,
                        "nodeType": "ExpressionStatement",
                        "src": "5696:14:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2652,
                            "name": "numMin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2642,
                            "src": "5718:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2653,
                            "name": "_numB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2555,
                            "src": "5727:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5718:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2655,
                        "nodeType": "ExpressionStatement",
                        "src": "5718:14:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2659,
                      "mutability": "mutable",
                      "name": "temp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "5776:12:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2658,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5776:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2663,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2660,
                      "name": "numMax",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2638,
                      "src": "5791:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2661,
                      "name": "denMin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2595,
                      "src": "5800:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5791:15:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5776:30:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2664,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "5815:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2665,
                      "name": "MAX_ERROR_BEFORE_DIV",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2277,
                      "src": "5822:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5815:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2674,
                  "nodeType": "IfStatement",
                  "src": "5812:89:11",
                  "trueBody": {
                    "id": 2673,
                    "nodeType": "Block",
                    "src": "5848:53:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2668,
                              "name": "temp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2659,
                              "src": "5873:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2669,
                              "name": "numMin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2642,
                              "src": "5879:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2670,
                              "name": "denMax",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2591,
                              "src": "5887:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2667,
                            "name": "bigDiv2x1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2493,
                            "src": "5863:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5863:31:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2563,
                        "id": 2672,
                        "nodeType": "Return",
                        "src": "5856:38:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2676
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2676,
                      "mutability": "mutable",
                      "name": "factor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2787,
                      "src": "6019:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2675,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6019:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2680,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2677,
                      "name": "numMin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2642,
                      "src": "6036:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6045:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6036:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6019:27:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2681,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2676,
                      "src": "6052:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2682,
                      "name": "MAX_BEFORE_SQUARE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2267,
                      "src": "6062:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6052:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2684,
                  "nodeType": "ExpressionStatement",
                  "src": "6052:27:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2685,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2676,
                      "src": "6085:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6095:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6085:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2688,
                  "nodeType": "ExpressionStatement",
                  "src": "6085:11:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2689,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6102:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2690,
                        "name": "numMax",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2638,
                        "src": "6109:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 2691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6118:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "6109:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6102:17:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2694,
                  "nodeType": "ExpressionStatement",
                  "src": "6102:17:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2695,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6125:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2696,
                      "name": "MAX_BEFORE_SQUARE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2267,
                      "src": "6133:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6125:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2698,
                  "nodeType": "ExpressionStatement",
                  "src": "6125:25:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2699,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6156:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 2700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6164:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6156:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2702,
                  "nodeType": "ExpressionStatement",
                  "src": "6156:9:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2705,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2703,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "6174:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2704,
                        "name": "factor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2676,
                        "src": "6185:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6174:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2706,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6195:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6174:25:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2756,
                  "nodeType": "IfStatement",
                  "src": "6171:360:11",
                  "trueBody": {
                    "id": 2755,
                    "nodeType": "Block",
                    "src": "6205:326:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2708,
                            "name": "factor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2676,
                            "src": "6213:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "*=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2709,
                            "name": "temp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2659,
                            "src": "6223:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6213:14:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2711,
                        "nodeType": "ExpressionStatement",
                        "src": "6213:14:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2712,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2612,
                            "src": "6236:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2713,
                              "name": "numMax",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2638,
                              "src": "6244:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 2714,
                              "name": "factor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2676,
                              "src": "6253:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6244:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6236:23:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2717,
                        "nodeType": "ExpressionStatement",
                        "src": "6236:23:11"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2718,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2612,
                            "src": "6270:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2719,
                            "name": "MAX_ERROR_BEFORE_DIV",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2277,
                            "src": "6278:20:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6270:28:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2754,
                        "nodeType": "IfStatement",
                        "src": "6267:258:11",
                        "trueBody": {
                          "id": 2753,
                          "nodeType": "Block",
                          "src": "6306:219:11",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2726,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2721,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2612,
                                  "src": "6316:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2724,
                                      "name": "numMin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2642,
                                      "src": "6334:6:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2722,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2612,
                                      "src": "6324:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2723,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 237,
                                    "src": "6324:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2725,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6324:17:11",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6316:25:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2727,
                              "nodeType": "ExpressionStatement",
                              "src": "6316:25:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2730,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2728,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2612,
                                  "src": "6351:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "/=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2729,
                                  "name": "denMin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2595,
                                  "src": "6360:6:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6351:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2731,
                              "nodeType": "ExpressionStatement",
                              "src": "6351:15:11"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 2740,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2734,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2732,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2612,
                                    "src": "6379:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2733,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6387:1:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "6379:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2739,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2737,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2735,
                                      "name": "MAX_UINT",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2259,
                                      "src": "6392:8:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2736,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2612,
                                      "src": "6403:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "6392:16:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2738,
                                    "name": "factor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2676,
                                    "src": "6412:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "6392:26:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "6379:39:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 2752,
                              "nodeType": "IfStatement",
                              "src": "6376:141:11",
                              "trueBody": {
                                "id": 2751,
                                "nodeType": "Block",
                                "src": "6428:89:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2743,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 2741,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2612,
                                        "src": "6440:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "*=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 2742,
                                        "name": "factor",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2676,
                                        "src": "6449:6:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6440:15:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2744,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6440:15:11"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2747,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 2745,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2612,
                                        "src": "6467:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "/=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 2746,
                                        "name": "denMax",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2591,
                                        "src": "6476:6:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6467:15:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2748,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6467:15:11"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2749,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2612,
                                      "src": "6501:5:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "functionReturnParameters": 2563,
                                    "id": 2750,
                                    "nodeType": "Return",
                                    "src": "6494:12:11"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2757,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2676,
                      "src": "6624:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2758,
                      "name": "denMin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2595,
                      "src": "6633:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6624:15:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2760,
                  "nodeType": "ExpressionStatement",
                  "src": "6624:15:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2761,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2676,
                      "src": "6645:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2762,
                      "name": "MAX_BEFORE_SQUARE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2267,
                      "src": "6655:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6645:27:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2764,
                  "nodeType": "ExpressionStatement",
                  "src": "6645:27:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2765,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6678:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2766,
                      "name": "denMax",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2591,
                      "src": "6685:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6678:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2768,
                  "nodeType": "ExpressionStatement",
                  "src": "6678:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2769,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6746:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "/=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2770,
                        "name": "MAX_BEFORE_SQUARE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2267,
                        "src": "6754:17:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 2771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6774:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "6754:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6746:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2774,
                  "nodeType": "ExpressionStatement",
                  "src": "6746:29:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2775,
                      "name": "factor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2676,
                      "src": "6781:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "*=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2776,
                      "name": "temp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2659,
                      "src": "6791:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6781:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2778,
                  "nodeType": "ExpressionStatement",
                  "src": "6781:14:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2780,
                          "name": "numMax",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2638,
                          "src": "6818:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2781,
                          "name": "factor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2676,
                          "src": "6827:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6818:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2783,
                        "name": "numMin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2642,
                        "src": "6835:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2784,
                        "name": "MAX_UINT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "6843:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2779,
                      "name": "bigDiv2x1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2493,
                      "src": "6808:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6808:44:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2563,
                  "id": 2786,
                  "nodeType": "Return",
                  "src": "6801:51:11"
                }
              ]
            },
            "documentation": {
              "id": 2551,
              "nodeType": "StructuredDocumentation",
              "src": "4233:494:11",
              "text": " @notice Returns the approx result of `a * b / (c * d)` so long as the result is <= MAX_UINT\n @param _numA the first numerator term\n @param _numB the second numerator term\n @param _denA the first denominator term\n @param _denB the second denominator term\n @return the approx result with up to off by 2 + MAX_ERROR*10 error, rounding down if needed\n @dev this uses bigDiv2x1 and adds additional rounding error so the max error of this\n formula is larger"
            },
            "id": 2788,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bigDiv2x2",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2553,
                  "mutability": "mutable",
                  "name": "_numA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2788,
                  "src": "4754:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2552,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4754:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2555,
                  "mutability": "mutable",
                  "name": "_numB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2788,
                  "src": "4773:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4773:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2557,
                  "mutability": "mutable",
                  "name": "_denA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2788,
                  "src": "4792:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2556,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2559,
                  "mutability": "mutable",
                  "name": "_denB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2788,
                  "src": "4811:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4811:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4748:80:11"
            },
            "returnParameters": {
              "id": 2563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2562,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2788,
                  "src": "4856:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2561,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4856:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4855:9:11"
            },
            "scope": 2789,
            "src": "4730:2127:11",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2790,
        "src": "587:6272:11"
      }
    ],
    "src": "32:6827:11"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/math/BigDiv.sol",
      "exportedSymbols": {
        "BigDiv": [
          2789
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.6",
            ".0"
          ]
        },
        "id": 2246,
        "name": "PragmaDirective",
        "src": "32:23:11"
      },
      {
        "attributes": {
          "SourceUnit": 355,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 2790,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2247,
        "name": "ImportDirective",
        "src": "58:51:11"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            2789
          ],
          "name": "BigDiv",
          "scope": 2790
        },
        "children": [
          {
            "attributes": {
              "text": " @title Reduces the size of terms before multiplication, to avoid an overflow, and then\n restores the proper size after division.\n @notice This effectively allows us to overflow values in the numerator and/or denominator\n of a fraction, so long as the end result does not overflow as well.\n @dev Results may be off by 1 + 0.000001% for 2x1 calls and 2 + 0.00001% for 2x2 calls.\n Do not use if your contract expects very small result values to be accurate."
            },
            "id": 2248,
            "name": "StructuredDocumentation",
            "src": "111:475:11"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 354,
                  "type": "library SafeMath"
                },
                "id": 2249,
                "name": "UserDefinedTypeName",
                "src": "612:8:11"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2250,
                "name": "ElementaryTypeName",
                "src": "625:7:11"
              }
            ],
            "id": 2251,
            "name": "UsingForDirective",
            "src": "606:27:11"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "MAX_UINT",
              "overrides": null,
              "scope": 2789,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2253,
                "name": "ElementaryTypeName",
                "src": "671:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                    "typeString": "int_const 1157...(70 digits omitted)...9935"
                  },
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "operator": "-",
                  "type": "int_const 1157...(70 digits omitted)...9935"
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                        "typeString": "int_const 1157...(70 digits omitted)...9936"
                      },
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "**",
                      "type": "int_const 1157...(70 digits omitted)...9936"
                    },
                    "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": 2254,
                        "name": "Literal",
                        "src": "707:1:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "323536",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 256",
                          "value": "256"
                        },
                        "id": 2255,
                        "name": "Literal",
                        "src": "710:3:11"
                      }
                    ],
                    "id": 2256,
                    "name": "BinaryOperation",
                    "src": "707:6:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "31",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "number",
                      "type": "int_const 1",
                      "value": "1"
                    },
                    "id": 2257,
                    "name": "Literal",
                    "src": "716:1:11"
                  }
                ],
                "id": 2258,
                "name": "BinaryOperation",
                "src": "707:10:11"
              },
              {
                "attributes": {
                  "text": "@dev The max possible value"
                },
                "id": 2252,
                "name": "StructuredDocumentation",
                "src": "637:31:11"
              }
            ],
            "id": 2259,
            "name": "VariableDeclaration",
            "src": "671:46:11"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "MAX_BEFORE_SQUARE",
              "overrides": null,
              "scope": 2789,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2261,
                "name": "ElementaryTypeName",
                "src": "798:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                    "typeString": "int_const 3402...(31 digits omitted)...1455"
                  },
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "operator": "-",
                  "type": "int_const 3402...(31 digits omitted)...1455"
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                        "typeString": "int_const 3402...(31 digits omitted)...1456"
                      },
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "**",
                      "type": "int_const 3402...(31 digits omitted)...1456"
                    },
                    "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": 2262,
                        "name": "Literal",
                        "src": "843:1:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "313238",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 128",
                          "value": "128"
                        },
                        "id": 2263,
                        "name": "Literal",
                        "src": "846:3:11"
                      }
                    ],
                    "id": 2264,
                    "name": "BinaryOperation",
                    "src": "843:6:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "31",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "number",
                      "type": "int_const 1",
                      "value": "1"
                    },
                    "id": 2265,
                    "name": "Literal",
                    "src": "852:1:11"
                  }
                ],
                "id": 2266,
                "name": "BinaryOperation",
                "src": "843:10:11"
              },
              {
                "attributes": {
                  "text": "@dev When multiplying 2 terms <= this value the result won't overflow"
                },
                "id": 2260,
                "name": "StructuredDocumentation",
                "src": "722:73:11"
              }
            ],
            "id": 2267,
            "name": "VariableDeclaration",
            "src": "798:55:11"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "MAX_ERROR",
              "overrides": null,
              "scope": 2789,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2269,
                "name": "ElementaryTypeName",
                "src": "978:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "313030303030303030",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 100000000",
                  "value": "100000000"
                },
                "id": 2270,
                "name": "Literal",
                "src": "1015:9:11"
              },
              {
                "attributes": {
                  "text": "@dev The max error target is off by 1 plus up to 0.000001% error\n for bigDiv2x1 and that `* 2` for bigDiv2x2"
                },
                "id": 2268,
                "name": "StructuredDocumentation",
                "src": "858:117:11"
              }
            ],
            "id": 2271,
            "name": "VariableDeclaration",
            "src": "978:46:11"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "MAX_ERROR_BEFORE_DIV",
              "overrides": null,
              "scope": 2789,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2273,
                "name": "ElementaryTypeName",
                "src": "1112:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "operator": "*",
                  "type": "uint256"
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 2271,
                      "type": "uint256",
                      "value": "MAX_ERROR"
                    },
                    "id": 2274,
                    "name": "Identifier",
                    "src": "1160:9:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "32",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "number",
                      "type": "int_const 2",
                      "value": "2"
                    },
                    "id": 2275,
                    "name": "Literal",
                    "src": "1172:1:11"
                  }
                ],
                "id": 2276,
                "name": "BinaryOperation",
                "src": "1160:13:11"
              },
              {
                "attributes": {
                  "text": "@dev A larger error threshold to use when multiple rounding errors may apply"
                },
                "id": 2272,
                "name": "StructuredDocumentation",
                "src": "1029:80:11"
              }
            ],
            "id": 2277,
            "name": "VariableDeclaration",
            "src": "1112:61:11"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "bigDiv2x1",
              "overrides": null,
              "scope": 2789,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @notice Returns the approx result of `a * b / d` so long as the result is <= MAX_UINT\n @param _numA the first numerator term\n @param _numB the second numerator term\n @param _den the denominator\n @return the approx result with up to off by 1 + MAX_ERROR, rounding down if needed"
                },
                "id": 2278,
                "name": "StructuredDocumentation",
                "src": "1178:308:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_numA",
                      "overrides": null,
                      "scope": 2493,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2279,
                        "name": "ElementaryTypeName",
                        "src": "1513:7:11"
                      }
                    ],
                    "id": 2280,
                    "name": "VariableDeclaration",
                    "src": "1513:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_numB",
                      "overrides": null,
                      "scope": 2493,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2281,
                        "name": "ElementaryTypeName",
                        "src": "1532:7:11"
                      }
                    ],
                    "id": 2282,
                    "name": "VariableDeclaration",
                    "src": "1532:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_den",
                      "overrides": null,
                      "scope": 2493,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2283,
                        "name": "ElementaryTypeName",
                        "src": "1551:7:11"
                      }
                    ],
                    "id": 2284,
                    "name": "VariableDeclaration",
                    "src": "1551:12:11"
                  }
                ],
                "id": 2285,
                "name": "ParameterList",
                "src": "1507:60:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 2493,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2286,
                        "name": "ElementaryTypeName",
                        "src": "1594:7:11"
                      }
                    ],
                    "id": 2287,
                    "name": "VariableDeclaration",
                    "src": "1594:7:11"
                  }
                ],
                "id": 2288,
                "name": "ParameterList",
                "src": "1593:9:11"
              },
              {
                "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_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2280,
                                  "type": "uint256",
                                  "value": "_numA"
                                },
                                "id": 2289,
                                "name": "Identifier",
                                "src": "1614:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2290,
                                "name": "Literal",
                                "src": "1623:1:11"
                              }
                            ],
                            "id": 2291,
                            "name": "BinaryOperation",
                            "src": "1614:10:11"
                          },
                          {
                            "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": 2282,
                                  "type": "uint256",
                                  "value": "_numB"
                                },
                                "id": 2292,
                                "name": "Identifier",
                                "src": "1628:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2293,
                                "name": "Literal",
                                "src": "1637:1:11"
                              }
                            ],
                            "id": 2294,
                            "name": "BinaryOperation",
                            "src": "1628:10:11"
                          }
                        ],
                        "id": 2295,
                        "name": "BinaryOperation",
                        "src": "1614:24:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2288
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2296,
                                "name": "Literal",
                                "src": "1723:1:11"
                              }
                            ],
                            "id": 2297,
                            "name": "Return",
                            "src": "1716:8:11"
                          }
                        ],
                        "id": 2298,
                        "name": "Block",
                        "src": "1644:87:11"
                      }
                    ],
                    "id": 2299,
                    "name": "IfStatement",
                    "src": "1611:120:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2301
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "value",
                          "overrides": null,
                          "scope": 2492,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2300,
                            "name": "ElementaryTypeName",
                            "src": "1737:7:11"
                          }
                        ],
                        "id": 2301,
                        "name": "VariableDeclaration",
                        "src": "1737:13:11"
                      }
                    ],
                    "id": 2302,
                    "name": "VariableDeclarationStatement",
                    "src": "1737:13:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2303,
                                "name": "Identifier",
                                "src": "1760:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2280,
                                  "type": "uint256",
                                  "value": "_numA"
                                },
                                "id": 2304,
                                "name": "Identifier",
                                "src": "1771:5:11"
                              }
                            ],
                            "id": 2305,
                            "name": "BinaryOperation",
                            "src": "1760:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2282,
                              "type": "uint256",
                              "value": "_numB"
                            },
                            "id": 2306,
                            "name": "Identifier",
                            "src": "1780:5:11"
                          }
                        ],
                        "id": 2307,
                        "name": "BinaryOperation",
                        "src": "1760:25:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2301,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2308,
                                    "name": "Identifier",
                                    "src": "1849:5:11"
                                  },
                                  {
                                    "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": 2280,
                                          "type": "uint256",
                                          "value": "_numA"
                                        },
                                        "id": 2309,
                                        "name": "Identifier",
                                        "src": "1857:5:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2282,
                                          "type": "uint256",
                                          "value": "_numB"
                                        },
                                        "id": 2310,
                                        "name": "Identifier",
                                        "src": "1865:5:11"
                                      }
                                    ],
                                    "id": 2311,
                                    "name": "BinaryOperation",
                                    "src": "1857:13:11"
                                  }
                                ],
                                "id": 2312,
                                "name": "Assignment",
                                "src": "1849:21:11"
                              }
                            ],
                            "id": 2313,
                            "name": "ExpressionStatement",
                            "src": "1849:21:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "/=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2301,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2314,
                                    "name": "Identifier",
                                    "src": "1878:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2284,
                                      "type": "uint256",
                                      "value": "_den"
                                    },
                                    "id": 2315,
                                    "name": "Identifier",
                                    "src": "1887:4:11"
                                  }
                                ],
                                "id": 2316,
                                "name": "Assignment",
                                "src": "1878:13:11"
                              }
                            ],
                            "id": 2317,
                            "name": "ExpressionStatement",
                            "src": "1878:13:11"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 2288
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2301,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 2318,
                                "name": "Identifier",
                                "src": "1906:5:11"
                              }
                            ],
                            "id": 2319,
                            "name": "Return",
                            "src": "1899:12:11"
                          }
                        ],
                        "id": 2320,
                        "name": "Block",
                        "src": "1791:127:11"
                      }
                    ],
                    "id": 2321,
                    "name": "IfStatement",
                    "src": "1757:161:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2323
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numMax",
                          "overrides": null,
                          "scope": 2492,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2322,
                            "name": "ElementaryTypeName",
                            "src": "1947:7:11"
                          }
                        ],
                        "id": 2323,
                        "name": "VariableDeclaration",
                        "src": "1947:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2282,
                          "type": "uint256",
                          "value": "_numB"
                        },
                        "id": 2324,
                        "name": "Identifier",
                        "src": "1964:5:11"
                      }
                    ],
                    "id": 2325,
                    "name": "VariableDeclarationStatement",
                    "src": "1947:22:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2327
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numMin",
                          "overrides": null,
                          "scope": 2492,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2326,
                            "name": "ElementaryTypeName",
                            "src": "1975:7:11"
                          }
                        ],
                        "id": 2327,
                        "name": "VariableDeclaration",
                        "src": "1975:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2280,
                          "type": "uint256",
                          "value": "_numA"
                        },
                        "id": 2328,
                        "name": "Identifier",
                        "src": "1992:5:11"
                      }
                    ],
                    "id": 2329,
                    "name": "VariableDeclarationStatement",
                    "src": "1975:22:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2280,
                              "type": "uint256",
                              "value": "_numA"
                            },
                            "id": 2330,
                            "name": "Identifier",
                            "src": "2006:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2282,
                              "type": "uint256",
                              "value": "_numB"
                            },
                            "id": 2331,
                            "name": "Identifier",
                            "src": "2014:5:11"
                          }
                        ],
                        "id": 2332,
                        "name": "BinaryOperation",
                        "src": "2006:13:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2323,
                                      "type": "uint256",
                                      "value": "numMax"
                                    },
                                    "id": 2333,
                                    "name": "Identifier",
                                    "src": "2033:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2280,
                                      "type": "uint256",
                                      "value": "_numA"
                                    },
                                    "id": 2334,
                                    "name": "Identifier",
                                    "src": "2042:5:11"
                                  }
                                ],
                                "id": 2335,
                                "name": "Assignment",
                                "src": "2033:14:11"
                              }
                            ],
                            "id": 2336,
                            "name": "ExpressionStatement",
                            "src": "2033:14:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2327,
                                      "type": "uint256",
                                      "value": "numMin"
                                    },
                                    "id": 2337,
                                    "name": "Identifier",
                                    "src": "2055:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2282,
                                      "type": "uint256",
                                      "value": "_numB"
                                    },
                                    "id": 2338,
                                    "name": "Identifier",
                                    "src": "2064:5:11"
                                  }
                                ],
                                "id": 2339,
                                "name": "Assignment",
                                "src": "2055:14:11"
                              }
                            ],
                            "id": 2340,
                            "name": "ExpressionStatement",
                            "src": "2055:14:11"
                          }
                        ],
                        "id": 2341,
                        "name": "Block",
                        "src": "2025:51:11"
                      }
                    ],
                    "id": 2342,
                    "name": "IfStatement",
                    "src": "2003:73:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2301,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2343,
                            "name": "Identifier",
                            "src": "2082:5:11"
                          },
                          {
                            "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": 2323,
                                  "type": "uint256",
                                  "value": "numMax"
                                },
                                "id": 2344,
                                "name": "Identifier",
                                "src": "2090:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2284,
                                  "type": "uint256",
                                  "value": "_den"
                                },
                                "id": 2345,
                                "name": "Identifier",
                                "src": "2099:4:11"
                              }
                            ],
                            "id": 2346,
                            "name": "BinaryOperation",
                            "src": "2090:13:11"
                          }
                        ],
                        "id": 2347,
                        "name": "Assignment",
                        "src": "2082:21:11"
                      }
                    ],
                    "id": 2348,
                    "name": "ExpressionStatement",
                    "src": "2082:21:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2301,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2349,
                            "name": "Identifier",
                            "src": "2112:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2271,
                              "type": "uint256",
                              "value": "MAX_ERROR"
                            },
                            "id": 2350,
                            "name": "Identifier",
                            "src": "2120:9:11"
                          }
                        ],
                        "id": 2351,
                        "name": "BinaryOperation",
                        "src": "2112:17:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2301,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2352,
                                    "name": "Identifier",
                                    "src": "2212:5:11"
                                  },
                                  {
                                    "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": "mul",
                                          "referencedDeclaration": 237,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2301,
                                              "type": "uint256",
                                              "value": "value"
                                            },
                                            "id": 2353,
                                            "name": "Identifier",
                                            "src": "2220:5:11"
                                          }
                                        ],
                                        "id": 2354,
                                        "name": "MemberAccess",
                                        "src": "2220:9:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2327,
                                          "type": "uint256",
                                          "value": "numMin"
                                        },
                                        "id": 2355,
                                        "name": "Identifier",
                                        "src": "2230:6:11"
                                      }
                                    ],
                                    "id": 2356,
                                    "name": "FunctionCall",
                                    "src": "2220:17:11"
                                  }
                                ],
                                "id": 2357,
                                "name": "Assignment",
                                "src": "2212:25:11"
                              }
                            ],
                            "id": 2358,
                            "name": "ExpressionStatement",
                            "src": "2212:25:11"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 2288
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2301,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 2359,
                                "name": "Identifier",
                                "src": "2252:5:11"
                              }
                            ],
                            "id": 2360,
                            "name": "Return",
                            "src": "2245:12:11"
                          }
                        ],
                        "id": 2361,
                        "name": "Block",
                        "src": "2135:129:11"
                      }
                    ],
                    "id": 2362,
                    "name": "IfStatement",
                    "src": "2109:155:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2364
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "factor",
                          "overrides": null,
                          "scope": 2492,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2363,
                            "name": "ElementaryTypeName",
                            "src": "2360:7:11"
                          }
                        ],
                        "id": 2364,
                        "name": "VariableDeclaration",
                        "src": "2360:14:11"
                      },
                      {
                        "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": 2327,
                              "type": "uint256",
                              "value": "numMin"
                            },
                            "id": 2365,
                            "name": "Identifier",
                            "src": "2377:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2366,
                            "name": "Literal",
                            "src": "2386:1:11"
                          }
                        ],
                        "id": 2367,
                        "name": "BinaryOperation",
                        "src": "2377:10:11"
                      }
                    ],
                    "id": 2368,
                    "name": "VariableDeclarationStatement",
                    "src": "2360:27:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2364,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2369,
                            "name": "Identifier",
                            "src": "2393:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "uint256",
                              "value": "MAX_BEFORE_SQUARE"
                            },
                            "id": 2370,
                            "name": "Identifier",
                            "src": "2403:17:11"
                          }
                        ],
                        "id": 2371,
                        "name": "Assignment",
                        "src": "2393:27:11"
                      }
                    ],
                    "id": 2372,
                    "name": "ExpressionStatement",
                    "src": "2393:27:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2364,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2373,
                            "name": "Identifier",
                            "src": "2426:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2374,
                            "name": "Literal",
                            "src": "2436:1:11"
                          }
                        ],
                        "id": 2375,
                        "name": "Assignment",
                        "src": "2426:11:11"
                      }
                    ],
                    "id": 2376,
                    "name": "ExpressionStatement",
                    "src": "2426:11:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2378
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "temp",
                          "overrides": null,
                          "scope": 2492,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2377,
                            "name": "ElementaryTypeName",
                            "src": "2443:7:11"
                          }
                        ],
                        "id": 2378,
                        "name": "VariableDeclaration",
                        "src": "2443:12:11"
                      },
                      {
                        "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": 2323,
                              "type": "uint256",
                              "value": "numMax"
                            },
                            "id": 2379,
                            "name": "Identifier",
                            "src": "2458:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2380,
                            "name": "Literal",
                            "src": "2467:1:11"
                          }
                        ],
                        "id": 2381,
                        "name": "BinaryOperation",
                        "src": "2458:10:11"
                      }
                    ],
                    "id": 2382,
                    "name": "VariableDeclarationStatement",
                    "src": "2443:25:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2383,
                            "name": "Identifier",
                            "src": "2474:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "uint256",
                              "value": "MAX_BEFORE_SQUARE"
                            },
                            "id": 2384,
                            "name": "Identifier",
                            "src": "2482:17:11"
                          }
                        ],
                        "id": 2385,
                        "name": "Assignment",
                        "src": "2474:25:11"
                      }
                    ],
                    "id": 2386,
                    "name": "ExpressionStatement",
                    "src": "2474:25:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2387,
                            "name": "Identifier",
                            "src": "2505:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2388,
                            "name": "Literal",
                            "src": "2513:1:11"
                          }
                        ],
                        "id": 2389,
                        "name": "Assignment",
                        "src": "2505:9:11"
                      }
                    ],
                    "id": 2390,
                    "name": "ExpressionStatement",
                    "src": "2505:9:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2391,
                                "name": "Identifier",
                                "src": "2523:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2364,
                                  "type": "uint256",
                                  "value": "factor"
                                },
                                "id": 2392,
                                "name": "Identifier",
                                "src": "2534:6:11"
                              }
                            ],
                            "id": 2393,
                            "name": "BinaryOperation",
                            "src": "2523:17:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2394,
                            "name": "Identifier",
                            "src": "2544:4:11"
                          }
                        ],
                        "id": 2395,
                        "name": "BinaryOperation",
                        "src": "2523:25:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "*=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2364,
                                      "type": "uint256",
                                      "value": "factor"
                                    },
                                    "id": 2396,
                                    "name": "Identifier",
                                    "src": "2562:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2378,
                                      "type": "uint256",
                                      "value": "temp"
                                    },
                                    "id": 2397,
                                    "name": "Identifier",
                                    "src": "2572:4:11"
                                  }
                                ],
                                "id": 2398,
                                "name": "Assignment",
                                "src": "2562:14:11"
                              }
                            ],
                            "id": 2399,
                            "name": "ExpressionStatement",
                            "src": "2562:14:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2301,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2400,
                                    "name": "Identifier",
                                    "src": "2584:5:11"
                                  },
                                  {
                                    "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": 2323,
                                          "type": "uint256",
                                          "value": "numMax"
                                        },
                                        "id": 2401,
                                        "name": "Identifier",
                                        "src": "2592:6:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2364,
                                          "type": "uint256",
                                          "value": "factor"
                                        },
                                        "id": 2402,
                                        "name": "Identifier",
                                        "src": "2601:6:11"
                                      }
                                    ],
                                    "id": 2403,
                                    "name": "BinaryOperation",
                                    "src": "2592:15:11"
                                  }
                                ],
                                "id": 2404,
                                "name": "Assignment",
                                "src": "2584:23:11"
                              }
                            ],
                            "id": 2405,
                            "name": "ExpressionStatement",
                            "src": "2584:23:11"
                          },
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2301,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2406,
                                    "name": "Identifier",
                                    "src": "2618:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2277,
                                      "type": "uint256",
                                      "value": "MAX_ERROR_BEFORE_DIV"
                                    },
                                    "id": 2407,
                                    "name": "Identifier",
                                    "src": "2626:20:11"
                                  }
                                ],
                                "id": 2408,
                                "name": "BinaryOperation",
                                "src": "2618:28:11"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2301,
                                              "type": "uint256",
                                              "value": "value"
                                            },
                                            "id": 2409,
                                            "name": "Identifier",
                                            "src": "2664:5:11"
                                          },
                                          {
                                            "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": "mul",
                                                  "referencedDeclaration": 237,
                                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2301,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 2410,
                                                    "name": "Identifier",
                                                    "src": "2672:5:11"
                                                  }
                                                ],
                                                "id": 2411,
                                                "name": "MemberAccess",
                                                "src": "2672:9:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2327,
                                                  "type": "uint256",
                                                  "value": "numMin"
                                                },
                                                "id": 2412,
                                                "name": "Identifier",
                                                "src": "2682:6:11"
                                              }
                                            ],
                                            "id": 2413,
                                            "name": "FunctionCall",
                                            "src": "2672:17:11"
                                          }
                                        ],
                                        "id": 2414,
                                        "name": "Assignment",
                                        "src": "2664:25:11"
                                      }
                                    ],
                                    "id": 2415,
                                    "name": "ExpressionStatement",
                                    "src": "2664:25:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2378,
                                              "type": "uint256",
                                              "value": "temp"
                                            },
                                            "id": 2416,
                                            "name": "Identifier",
                                            "src": "2699:4:11"
                                          },
                                          {
                                            "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": 2284,
                                                  "type": "uint256",
                                                  "value": "_den"
                                                },
                                                "id": 2417,
                                                "name": "Identifier",
                                                "src": "2706:4:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 2418,
                                                "name": "Literal",
                                                "src": "2713:1:11"
                                              }
                                            ],
                                            "id": 2419,
                                            "name": "BinaryOperation",
                                            "src": "2706:8:11"
                                          }
                                        ],
                                        "id": 2420,
                                        "name": "Assignment",
                                        "src": "2699:15:11"
                                      }
                                    ],
                                    "id": 2421,
                                    "name": "ExpressionStatement",
                                    "src": "2699:15:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "/=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2378,
                                              "type": "uint256",
                                              "value": "temp"
                                            },
                                            "id": 2422,
                                            "name": "Identifier",
                                            "src": "2724:4:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2364,
                                              "type": "uint256",
                                              "value": "factor"
                                            },
                                            "id": 2423,
                                            "name": "Identifier",
                                            "src": "2732:6:11"
                                          }
                                        ],
                                        "id": 2424,
                                        "name": "Assignment",
                                        "src": "2724:14:11"
                                      }
                                    ],
                                    "id": 2425,
                                    "name": "ExpressionStatement",
                                    "src": "2724:14:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2378,
                                              "type": "uint256",
                                              "value": "temp"
                                            },
                                            "id": 2426,
                                            "name": "Identifier",
                                            "src": "2748:4:11"
                                          },
                                          {
                                            "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_rational_1_by_1",
                                                      "typeString": "int_const 1"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "add",
                                                  "referencedDeclaration": 181,
                                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2378,
                                                      "type": "uint256",
                                                      "value": "temp"
                                                    },
                                                    "id": 2427,
                                                    "name": "Identifier",
                                                    "src": "2755:4:11"
                                                  }
                                                ],
                                                "id": 2428,
                                                "name": "MemberAccess",
                                                "src": "2755:8:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 2429,
                                                "name": "Literal",
                                                "src": "2764:1:11"
                                              }
                                            ],
                                            "id": 2430,
                                            "name": "FunctionCall",
                                            "src": "2755:11:11"
                                          }
                                        ],
                                        "id": 2431,
                                        "name": "Assignment",
                                        "src": "2748:18:11"
                                      }
                                    ],
                                    "id": 2432,
                                    "name": "ExpressionStatement",
                                    "src": "2748:18:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "/=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2301,
                                              "type": "uint256",
                                              "value": "value"
                                            },
                                            "id": 2433,
                                            "name": "Identifier",
                                            "src": "2776:5:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2378,
                                              "type": "uint256",
                                              "value": "temp"
                                            },
                                            "id": 2434,
                                            "name": "Identifier",
                                            "src": "2785:4:11"
                                          }
                                        ],
                                        "id": 2435,
                                        "name": "Assignment",
                                        "src": "2776:13:11"
                                      }
                                    ],
                                    "id": 2436,
                                    "name": "ExpressionStatement",
                                    "src": "2776:13:11"
                                  },
                                  {
                                    "attributes": {
                                      "functionReturnParameters": 2288
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2301,
                                          "type": "uint256",
                                          "value": "value"
                                        },
                                        "id": 2437,
                                        "name": "Identifier",
                                        "src": "2806:5:11"
                                      }
                                    ],
                                    "id": 2438,
                                    "name": "Return",
                                    "src": "2799:12:11"
                                  }
                                ],
                                "id": 2439,
                                "name": "Block",
                                "src": "2654:166:11"
                              }
                            ],
                            "id": 2440,
                            "name": "IfStatement",
                            "src": "2615:205:11"
                          }
                        ],
                        "id": 2441,
                        "name": "Block",
                        "src": "2554:272:11"
                      }
                    ],
                    "id": 2442,
                    "name": "IfStatement",
                    "src": "2520:306:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2364,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2443,
                            "name": "Identifier",
                            "src": "2901:6:11"
                          },
                          {
                            "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": 2327,
                                  "type": "uint256",
                                  "value": "numMin"
                                },
                                "id": 2444,
                                "name": "Identifier",
                                "src": "2910:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 2445,
                                "name": "Literal",
                                "src": "2919:1:11"
                              }
                            ],
                            "id": 2446,
                            "name": "BinaryOperation",
                            "src": "2910:10:11"
                          }
                        ],
                        "id": 2447,
                        "name": "Assignment",
                        "src": "2901:19:11"
                      }
                    ],
                    "id": 2448,
                    "name": "ExpressionStatement",
                    "src": "2901:19:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2364,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2449,
                            "name": "Identifier",
                            "src": "2926:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "uint256",
                              "value": "MAX_BEFORE_SQUARE"
                            },
                            "id": 2450,
                            "name": "Identifier",
                            "src": "2936:17:11"
                          }
                        ],
                        "id": 2451,
                        "name": "Assignment",
                        "src": "2926:27:11"
                      }
                    ],
                    "id": 2452,
                    "name": "ExpressionStatement",
                    "src": "2926:27:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2364,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2453,
                            "name": "Identifier",
                            "src": "2959:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2454,
                            "name": "Literal",
                            "src": "2969:1:11"
                          }
                        ],
                        "id": 2455,
                        "name": "Assignment",
                        "src": "2959:11:11"
                      }
                    ],
                    "id": 2456,
                    "name": "ExpressionStatement",
                    "src": "2959:11:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2301,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2457,
                            "name": "Identifier",
                            "src": "2976:5:11"
                          },
                          {
                            "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": 2327,
                                  "type": "uint256",
                                  "value": "numMin"
                                },
                                "id": 2458,
                                "name": "Identifier",
                                "src": "2984:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2364,
                                  "type": "uint256",
                                  "value": "factor"
                                },
                                "id": 2459,
                                "name": "Identifier",
                                "src": "2993:6:11"
                              }
                            ],
                            "id": 2460,
                            "name": "BinaryOperation",
                            "src": "2984:15:11"
                          }
                        ],
                        "id": 2461,
                        "name": "Assignment",
                        "src": "2976:23:11"
                      }
                    ],
                    "id": 2462,
                    "name": "ExpressionStatement",
                    "src": "2976:23:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2463,
                            "name": "Identifier",
                            "src": "3005:4:11"
                          },
                          {
                            "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": 2284,
                                  "type": "uint256",
                                  "value": "_den"
                                },
                                "id": 2464,
                                "name": "Identifier",
                                "src": "3012:4:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 2465,
                                "name": "Literal",
                                "src": "3019:1:11"
                              }
                            ],
                            "id": 2466,
                            "name": "BinaryOperation",
                            "src": "3012:8:11"
                          }
                        ],
                        "id": 2467,
                        "name": "Assignment",
                        "src": "3005:15:11"
                      }
                    ],
                    "id": 2468,
                    "name": "ExpressionStatement",
                    "src": "3005:15:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2469,
                            "name": "Identifier",
                            "src": "3026:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2364,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2470,
                            "name": "Identifier",
                            "src": "3034:6:11"
                          }
                        ],
                        "id": 2471,
                        "name": "Assignment",
                        "src": "3026:14:11"
                      }
                    ],
                    "id": 2472,
                    "name": "ExpressionStatement",
                    "src": "3026:14:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2473,
                            "name": "Identifier",
                            "src": "3046:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2474,
                            "name": "Literal",
                            "src": "3054:1:11"
                          }
                        ],
                        "id": 2475,
                        "name": "Assignment",
                        "src": "3046:9:11"
                      }
                    ],
                    "id": 2476,
                    "name": "ExpressionStatement",
                    "src": "3046:9:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2378,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2477,
                            "name": "Identifier",
                            "src": "3061:4:11"
                          },
                          {
                            "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": 2323,
                                  "type": "uint256",
                                  "value": "numMax"
                                },
                                "id": 2478,
                                "name": "Identifier",
                                "src": "3068:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2378,
                                  "type": "uint256",
                                  "value": "temp"
                                },
                                "id": 2479,
                                "name": "Identifier",
                                "src": "3077:4:11"
                              }
                            ],
                            "id": 2480,
                            "name": "BinaryOperation",
                            "src": "3068:13:11"
                          }
                        ],
                        "id": 2481,
                        "name": "Assignment",
                        "src": "3061:20:11"
                      }
                    ],
                    "id": 2482,
                    "name": "ExpressionStatement",
                    "src": "3061:20:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2301,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2483,
                            "name": "Identifier",
                            "src": "3087:5:11"
                          },
                          {
                            "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": "mul",
                                  "referencedDeclaration": 237,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2301,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2484,
                                    "name": "Identifier",
                                    "src": "3095:5:11"
                                  }
                                ],
                                "id": 2485,
                                "name": "MemberAccess",
                                "src": "3095:9:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2378,
                                  "type": "uint256",
                                  "value": "temp"
                                },
                                "id": 2486,
                                "name": "Identifier",
                                "src": "3105:4:11"
                              }
                            ],
                            "id": 2487,
                            "name": "FunctionCall",
                            "src": "3095:15:11"
                          }
                        ],
                        "id": 2488,
                        "name": "Assignment",
                        "src": "3087:23:11"
                      }
                    ],
                    "id": 2489,
                    "name": "ExpressionStatement",
                    "src": "3087:23:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2288
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2301,
                          "type": "uint256",
                          "value": "value"
                        },
                        "id": 2490,
                        "name": "Identifier",
                        "src": "3123:5:11"
                      }
                    ],
                    "id": 2491,
                    "name": "Return",
                    "src": "3116:12:11"
                  }
                ],
                "id": 2492,
                "name": "Block",
                "src": "1605:1528:11"
              }
            ],
            "id": 2493,
            "name": "FunctionDefinition",
            "src": "1489:1644:11"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "bigDiv2x1RoundUp",
              "overrides": null,
              "scope": 2789,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @notice Returns the approx result of `a * b / d` so long as the result is <= MAX_UINT\n @param _numA the first numerator term\n @param _numB the second numerator term\n @param _den the denominator\n @return the approx result with up to off by 1 + MAX_ERROR, rounding down if needed\n @dev roundUp is implemented by first rounding down and then adding the max error to the result"
                },
                "id": 2494,
                "name": "StructuredDocumentation",
                "src": "3137:408:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_numA",
                      "overrides": null,
                      "scope": 2550,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2495,
                        "name": "ElementaryTypeName",
                        "src": "3579:7:11"
                      }
                    ],
                    "id": 2496,
                    "name": "VariableDeclaration",
                    "src": "3579:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_numB",
                      "overrides": null,
                      "scope": 2550,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2497,
                        "name": "ElementaryTypeName",
                        "src": "3598:7:11"
                      }
                    ],
                    "id": 2498,
                    "name": "VariableDeclaration",
                    "src": "3598:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_den",
                      "overrides": null,
                      "scope": 2550,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2499,
                        "name": "ElementaryTypeName",
                        "src": "3617:7:11"
                      }
                    ],
                    "id": 2500,
                    "name": "VariableDeclaration",
                    "src": "3617:12:11"
                  }
                ],
                "id": 2501,
                "name": "ParameterList",
                "src": "3573:60:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 2550,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2502,
                        "name": "ElementaryTypeName",
                        "src": "3660:7:11"
                      }
                    ],
                    "id": 2503,
                    "name": "VariableDeclaration",
                    "src": "3660:7:11"
                  }
                ],
                "id": 2504,
                "name": "ParameterList",
                "src": "3659:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2506
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "value",
                          "overrides": null,
                          "scope": 2549,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2505,
                            "name": "ElementaryTypeName",
                            "src": "3718:7:11"
                          }
                        ],
                        "id": 2506,
                        "name": "VariableDeclaration",
                        "src": "3718:13:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2493,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)",
                              "value": "bigDiv2x1"
                            },
                            "id": 2507,
                            "name": "Identifier",
                            "src": "3734:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2496,
                              "type": "uint256",
                              "value": "_numA"
                            },
                            "id": 2508,
                            "name": "Identifier",
                            "src": "3744:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2498,
                              "type": "uint256",
                              "value": "_numB"
                            },
                            "id": 2509,
                            "name": "Identifier",
                            "src": "3751:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2500,
                              "type": "uint256",
                              "value": "_den"
                            },
                            "id": 2510,
                            "name": "Identifier",
                            "src": "3758:4:11"
                          }
                        ],
                        "id": 2511,
                        "name": "FunctionCall",
                        "src": "3734:29:11"
                      }
                    ],
                    "id": 2512,
                    "name": "VariableDeclarationStatement",
                    "src": "3718:45:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2506,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2513,
                            "name": "Identifier",
                            "src": "3773:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2514,
                            "name": "Literal",
                            "src": "3782:1:11"
                          }
                        ],
                        "id": 2515,
                        "name": "BinaryOperation",
                        "src": "3773:10:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2504
                            },
                            "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": 2516,
                                "name": "Literal",
                                "src": "3877:1:11"
                              }
                            ],
                            "id": 2517,
                            "name": "Return",
                            "src": "3870:8:11"
                          }
                        ],
                        "id": 2518,
                        "name": "Block",
                        "src": "3789:96:11"
                      }
                    ],
                    "id": 2519,
                    "name": "IfStatement",
                    "src": "3770:115:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2521
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "temp",
                          "overrides": null,
                          "scope": 2549,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2520,
                            "name": "ElementaryTypeName",
                            "src": "4006:7:11"
                          }
                        ],
                        "id": 2521,
                        "name": "VariableDeclaration",
                        "src": "4006:12:11"
                      },
                      {
                        "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": 2506,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2522,
                            "name": "Identifier",
                            "src": "4021:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2523,
                            "name": "Literal",
                            "src": "4029:1:11"
                          }
                        ],
                        "id": 2524,
                        "name": "BinaryOperation",
                        "src": "4021:9:11"
                      }
                    ],
                    "id": 2525,
                    "name": "VariableDeclarationStatement",
                    "src": "4006:24:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2521,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2526,
                            "name": "Identifier",
                            "src": "4036:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2271,
                              "type": "uint256",
                              "value": "MAX_ERROR"
                            },
                            "id": 2527,
                            "name": "Identifier",
                            "src": "4044:9:11"
                          }
                        ],
                        "id": 2528,
                        "name": "Assignment",
                        "src": "4036:17:11"
                      }
                    ],
                    "id": 2529,
                    "name": "ExpressionStatement",
                    "src": "4036:17:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2521,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2530,
                            "name": "Identifier",
                            "src": "4059:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2531,
                            "name": "Literal",
                            "src": "4067:1:11"
                          }
                        ],
                        "id": 2532,
                        "name": "Assignment",
                        "src": "4059:9:11"
                      }
                    ],
                    "id": 2533,
                    "name": "ExpressionStatement",
                    "src": "4059:9:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2534,
                                "name": "Identifier",
                                "src": "4077:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2506,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 2535,
                                "name": "Identifier",
                                "src": "4088:5:11"
                              }
                            ],
                            "id": 2536,
                            "name": "BinaryOperation",
                            "src": "4077:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2521,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2537,
                            "name": "Identifier",
                            "src": "4096:4:11"
                          }
                        ],
                        "id": 2538,
                        "name": "BinaryOperation",
                        "src": "4077:23:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2504
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2539,
                                "name": "Identifier",
                                "src": "4171:8:11"
                              }
                            ],
                            "id": 2540,
                            "name": "Return",
                            "src": "4164:15:11"
                          }
                        ],
                        "id": 2541,
                        "name": "Block",
                        "src": "4106:80:11"
                      }
                    ],
                    "id": 2542,
                    "name": "IfStatement",
                    "src": "4074:112:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2506,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 2543,
                            "name": "Identifier",
                            "src": "4192:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2521,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2544,
                            "name": "Identifier",
                            "src": "4201:4:11"
                          }
                        ],
                        "id": 2545,
                        "name": "Assignment",
                        "src": "4192:13:11"
                      }
                    ],
                    "id": 2546,
                    "name": "ExpressionStatement",
                    "src": "4192:13:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2504
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2506,
                          "type": "uint256",
                          "value": "value"
                        },
                        "id": 2547,
                        "name": "Identifier",
                        "src": "4219:5:11"
                      }
                    ],
                    "id": 2548,
                    "name": "Return",
                    "src": "4212:12:11"
                  }
                ],
                "id": 2549,
                "name": "Block",
                "src": "3671:558:11"
              }
            ],
            "id": 2550,
            "name": "FunctionDefinition",
            "src": "3548:681:11"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "bigDiv2x2",
              "overrides": null,
              "scope": 2789,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @notice Returns the approx result of `a * b / (c * d)` so long as the result is <= MAX_UINT\n @param _numA the first numerator term\n @param _numB the second numerator term\n @param _denA the first denominator term\n @param _denB the second denominator term\n @return the approx result with up to off by 2 + MAX_ERROR*10 error, rounding down if needed\n @dev this uses bigDiv2x1 and adds additional rounding error so the max error of this\n formula is larger"
                },
                "id": 2551,
                "name": "StructuredDocumentation",
                "src": "4233:494:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_numA",
                      "overrides": null,
                      "scope": 2788,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2552,
                        "name": "ElementaryTypeName",
                        "src": "4754:7:11"
                      }
                    ],
                    "id": 2553,
                    "name": "VariableDeclaration",
                    "src": "4754:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_numB",
                      "overrides": null,
                      "scope": 2788,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2554,
                        "name": "ElementaryTypeName",
                        "src": "4773:7:11"
                      }
                    ],
                    "id": 2555,
                    "name": "VariableDeclaration",
                    "src": "4773:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_denA",
                      "overrides": null,
                      "scope": 2788,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2556,
                        "name": "ElementaryTypeName",
                        "src": "4792:7:11"
                      }
                    ],
                    "id": 2557,
                    "name": "VariableDeclaration",
                    "src": "4792:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_denB",
                      "overrides": null,
                      "scope": 2788,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2558,
                        "name": "ElementaryTypeName",
                        "src": "4811:7:11"
                      }
                    ],
                    "id": 2559,
                    "name": "VariableDeclaration",
                    "src": "4811:13:11"
                  }
                ],
                "id": 2560,
                "name": "ParameterList",
                "src": "4748:80:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 2788,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2561,
                        "name": "ElementaryTypeName",
                        "src": "4856:7:11"
                      }
                    ],
                    "id": 2562,
                    "name": "VariableDeclaration",
                    "src": "4856:7:11"
                  }
                ],
                "id": 2563,
                "name": "ParameterList",
                "src": "4855:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2564,
                                "name": "Identifier",
                                "src": "4876:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2557,
                                  "type": "uint256",
                                  "value": "_denA"
                                },
                                "id": 2565,
                                "name": "Identifier",
                                "src": "4887:5:11"
                              }
                            ],
                            "id": 2566,
                            "name": "BinaryOperation",
                            "src": "4876:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2559,
                              "type": "uint256",
                              "value": "_denB"
                            },
                            "id": 2567,
                            "name": "Identifier",
                            "src": "4896:5:11"
                          }
                        ],
                        "id": 2568,
                        "name": "BinaryOperation",
                        "src": "4876:25:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2563
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2493,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)",
                                      "value": "bigDiv2x1"
                                    },
                                    "id": 2569,
                                    "name": "Identifier",
                                    "src": "4982:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2553,
                                      "type": "uint256",
                                      "value": "_numA"
                                    },
                                    "id": 2570,
                                    "name": "Identifier",
                                    "src": "4992:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2555,
                                      "type": "uint256",
                                      "value": "_numB"
                                    },
                                    "id": 2571,
                                    "name": "Identifier",
                                    "src": "4999:5:11"
                                  },
                                  {
                                    "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": 2557,
                                          "type": "uint256",
                                          "value": "_denA"
                                        },
                                        "id": 2572,
                                        "name": "Identifier",
                                        "src": "5006:5:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2559,
                                          "type": "uint256",
                                          "value": "_denB"
                                        },
                                        "id": 2573,
                                        "name": "Identifier",
                                        "src": "5014:5:11"
                                      }
                                    ],
                                    "id": 2574,
                                    "name": "BinaryOperation",
                                    "src": "5006:13:11"
                                  }
                                ],
                                "id": 2575,
                                "name": "FunctionCall",
                                "src": "4982:38:11"
                              }
                            ],
                            "id": 2576,
                            "name": "Return",
                            "src": "4975:45:11"
                          }
                        ],
                        "id": 2577,
                        "name": "Block",
                        "src": "4907:120:11"
                      }
                    ],
                    "id": 2578,
                    "name": "IfStatement",
                    "src": "4873:154:11"
                  },
                  {
                    "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_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2553,
                                  "type": "uint256",
                                  "value": "_numA"
                                },
                                "id": 2579,
                                "name": "Identifier",
                                "src": "5036:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2580,
                                "name": "Literal",
                                "src": "5045:1:11"
                              }
                            ],
                            "id": 2581,
                            "name": "BinaryOperation",
                            "src": "5036:10:11"
                          },
                          {
                            "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": 2555,
                                  "type": "uint256",
                                  "value": "_numB"
                                },
                                "id": 2582,
                                "name": "Identifier",
                                "src": "5050:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2583,
                                "name": "Literal",
                                "src": "5059:1:11"
                              }
                            ],
                            "id": 2584,
                            "name": "BinaryOperation",
                            "src": "5050:10:11"
                          }
                        ],
                        "id": 2585,
                        "name": "BinaryOperation",
                        "src": "5036:24:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2563
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2586,
                                "name": "Literal",
                                "src": "5145:1:11"
                              }
                            ],
                            "id": 2587,
                            "name": "Return",
                            "src": "5138:8:11"
                          }
                        ],
                        "id": 2588,
                        "name": "Block",
                        "src": "5066:87:11"
                      }
                    ],
                    "id": 2589,
                    "name": "IfStatement",
                    "src": "5033:120:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2591
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "denMax",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2590,
                            "name": "ElementaryTypeName",
                            "src": "5184:7:11"
                          }
                        ],
                        "id": 2591,
                        "name": "VariableDeclaration",
                        "src": "5184:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2559,
                          "type": "uint256",
                          "value": "_denB"
                        },
                        "id": 2592,
                        "name": "Identifier",
                        "src": "5201:5:11"
                      }
                    ],
                    "id": 2593,
                    "name": "VariableDeclarationStatement",
                    "src": "5184:22:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2595
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "denMin",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2594,
                            "name": "ElementaryTypeName",
                            "src": "5212:7:11"
                          }
                        ],
                        "id": 2595,
                        "name": "VariableDeclaration",
                        "src": "5212:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2557,
                          "type": "uint256",
                          "value": "_denA"
                        },
                        "id": 2596,
                        "name": "Identifier",
                        "src": "5229:5:11"
                      }
                    ],
                    "id": 2597,
                    "name": "VariableDeclarationStatement",
                    "src": "5212:22:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2557,
                              "type": "uint256",
                              "value": "_denA"
                            },
                            "id": 2598,
                            "name": "Identifier",
                            "src": "5243:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2559,
                              "type": "uint256",
                              "value": "_denB"
                            },
                            "id": 2599,
                            "name": "Identifier",
                            "src": "5251:5:11"
                          }
                        ],
                        "id": 2600,
                        "name": "BinaryOperation",
                        "src": "5243:13:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2591,
                                      "type": "uint256",
                                      "value": "denMax"
                                    },
                                    "id": 2601,
                                    "name": "Identifier",
                                    "src": "5270:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2557,
                                      "type": "uint256",
                                      "value": "_denA"
                                    },
                                    "id": 2602,
                                    "name": "Identifier",
                                    "src": "5279:5:11"
                                  }
                                ],
                                "id": 2603,
                                "name": "Assignment",
                                "src": "5270:14:11"
                              }
                            ],
                            "id": 2604,
                            "name": "ExpressionStatement",
                            "src": "5270:14:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2595,
                                      "type": "uint256",
                                      "value": "denMin"
                                    },
                                    "id": 2605,
                                    "name": "Identifier",
                                    "src": "5292:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2559,
                                      "type": "uint256",
                                      "value": "_denB"
                                    },
                                    "id": 2606,
                                    "name": "Identifier",
                                    "src": "5301:5:11"
                                  }
                                ],
                                "id": 2607,
                                "name": "Assignment",
                                "src": "5292:14:11"
                              }
                            ],
                            "id": 2608,
                            "name": "ExpressionStatement",
                            "src": "5292:14:11"
                          }
                        ],
                        "id": 2609,
                        "name": "Block",
                        "src": "5262:51:11"
                      }
                    ],
                    "id": 2610,
                    "name": "IfStatement",
                    "src": "5240:73:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2612
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "value",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2611,
                            "name": "ElementaryTypeName",
                            "src": "5319:7:11"
                          }
                        ],
                        "id": 2612,
                        "name": "VariableDeclaration",
                        "src": "5319:13:11"
                      }
                    ],
                    "id": 2613,
                    "name": "VariableDeclarationStatement",
                    "src": "5319:13:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2614,
                                "name": "Identifier",
                                "src": "5342:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2553,
                                  "type": "uint256",
                                  "value": "_numA"
                                },
                                "id": 2615,
                                "name": "Identifier",
                                "src": "5353:5:11"
                              }
                            ],
                            "id": 2616,
                            "name": "BinaryOperation",
                            "src": "5342:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2555,
                              "type": "uint256",
                              "value": "_numB"
                            },
                            "id": 2617,
                            "name": "Identifier",
                            "src": "5362:5:11"
                          }
                        ],
                        "id": 2618,
                        "name": "BinaryOperation",
                        "src": "5342:25:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2612,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2619,
                                    "name": "Identifier",
                                    "src": "5429:5:11"
                                  },
                                  {
                                    "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": 2553,
                                          "type": "uint256",
                                          "value": "_numA"
                                        },
                                        "id": 2620,
                                        "name": "Identifier",
                                        "src": "5437:5:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2555,
                                          "type": "uint256",
                                          "value": "_numB"
                                        },
                                        "id": 2621,
                                        "name": "Identifier",
                                        "src": "5445:5:11"
                                      }
                                    ],
                                    "id": 2622,
                                    "name": "BinaryOperation",
                                    "src": "5437:13:11"
                                  }
                                ],
                                "id": 2623,
                                "name": "Assignment",
                                "src": "5429:21:11"
                              }
                            ],
                            "id": 2624,
                            "name": "ExpressionStatement",
                            "src": "5429:21:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "/=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2612,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2625,
                                    "name": "Identifier",
                                    "src": "5458:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2595,
                                      "type": "uint256",
                                      "value": "denMin"
                                    },
                                    "id": 2626,
                                    "name": "Identifier",
                                    "src": "5467:6:11"
                                  }
                                ],
                                "id": 2627,
                                "name": "Assignment",
                                "src": "5458:15:11"
                              }
                            ],
                            "id": 2628,
                            "name": "ExpressionStatement",
                            "src": "5458:15:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "/=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2612,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2629,
                                    "name": "Identifier",
                                    "src": "5481:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2591,
                                      "type": "uint256",
                                      "value": "denMax"
                                    },
                                    "id": 2630,
                                    "name": "Identifier",
                                    "src": "5490:6:11"
                                  }
                                ],
                                "id": 2631,
                                "name": "Assignment",
                                "src": "5481:15:11"
                              }
                            ],
                            "id": 2632,
                            "name": "ExpressionStatement",
                            "src": "5481:15:11"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 2563
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2612,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 2633,
                                "name": "Identifier",
                                "src": "5511:5:11"
                              }
                            ],
                            "id": 2634,
                            "name": "Return",
                            "src": "5504:12:11"
                          }
                        ],
                        "id": 2635,
                        "name": "Block",
                        "src": "5373:150:11"
                      }
                    ],
                    "id": 2636,
                    "name": "IfStatement",
                    "src": "5339:184:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2638
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numMax",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2637,
                            "name": "ElementaryTypeName",
                            "src": "5610:7:11"
                          }
                        ],
                        "id": 2638,
                        "name": "VariableDeclaration",
                        "src": "5610:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2555,
                          "type": "uint256",
                          "value": "_numB"
                        },
                        "id": 2639,
                        "name": "Identifier",
                        "src": "5627:5:11"
                      }
                    ],
                    "id": 2640,
                    "name": "VariableDeclarationStatement",
                    "src": "5610:22:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2642
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numMin",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2641,
                            "name": "ElementaryTypeName",
                            "src": "5638:7:11"
                          }
                        ],
                        "id": 2642,
                        "name": "VariableDeclaration",
                        "src": "5638:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2553,
                          "type": "uint256",
                          "value": "_numA"
                        },
                        "id": 2643,
                        "name": "Identifier",
                        "src": "5655:5:11"
                      }
                    ],
                    "id": 2644,
                    "name": "VariableDeclarationStatement",
                    "src": "5638:22:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2553,
                              "type": "uint256",
                              "value": "_numA"
                            },
                            "id": 2645,
                            "name": "Identifier",
                            "src": "5669:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2555,
                              "type": "uint256",
                              "value": "_numB"
                            },
                            "id": 2646,
                            "name": "Identifier",
                            "src": "5677:5:11"
                          }
                        ],
                        "id": 2647,
                        "name": "BinaryOperation",
                        "src": "5669:13:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2638,
                                      "type": "uint256",
                                      "value": "numMax"
                                    },
                                    "id": 2648,
                                    "name": "Identifier",
                                    "src": "5696:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2553,
                                      "type": "uint256",
                                      "value": "_numA"
                                    },
                                    "id": 2649,
                                    "name": "Identifier",
                                    "src": "5705:5:11"
                                  }
                                ],
                                "id": 2650,
                                "name": "Assignment",
                                "src": "5696:14:11"
                              }
                            ],
                            "id": 2651,
                            "name": "ExpressionStatement",
                            "src": "5696:14:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2642,
                                      "type": "uint256",
                                      "value": "numMin"
                                    },
                                    "id": 2652,
                                    "name": "Identifier",
                                    "src": "5718:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2555,
                                      "type": "uint256",
                                      "value": "_numB"
                                    },
                                    "id": 2653,
                                    "name": "Identifier",
                                    "src": "5727:5:11"
                                  }
                                ],
                                "id": 2654,
                                "name": "Assignment",
                                "src": "5718:14:11"
                              }
                            ],
                            "id": 2655,
                            "name": "ExpressionStatement",
                            "src": "5718:14:11"
                          }
                        ],
                        "id": 2656,
                        "name": "Block",
                        "src": "5688:51:11"
                      }
                    ],
                    "id": 2657,
                    "name": "IfStatement",
                    "src": "5666:73:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2659
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "temp",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2658,
                            "name": "ElementaryTypeName",
                            "src": "5776:7:11"
                          }
                        ],
                        "id": 2659,
                        "name": "VariableDeclaration",
                        "src": "5776:12:11"
                      },
                      {
                        "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": 2638,
                              "type": "uint256",
                              "value": "numMax"
                            },
                            "id": 2660,
                            "name": "Identifier",
                            "src": "5791:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2595,
                              "type": "uint256",
                              "value": "denMin"
                            },
                            "id": 2661,
                            "name": "Identifier",
                            "src": "5800:6:11"
                          }
                        ],
                        "id": 2662,
                        "name": "BinaryOperation",
                        "src": "5791:15:11"
                      }
                    ],
                    "id": 2663,
                    "name": "VariableDeclarationStatement",
                    "src": "5776:30:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2664,
                            "name": "Identifier",
                            "src": "5815:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2277,
                              "type": "uint256",
                              "value": "MAX_ERROR_BEFORE_DIV"
                            },
                            "id": 2665,
                            "name": "Identifier",
                            "src": "5822:20:11"
                          }
                        ],
                        "id": 2666,
                        "name": "BinaryOperation",
                        "src": "5815:27:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 2563
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2493,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)",
                                      "value": "bigDiv2x1"
                                    },
                                    "id": 2667,
                                    "name": "Identifier",
                                    "src": "5863:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2659,
                                      "type": "uint256",
                                      "value": "temp"
                                    },
                                    "id": 2668,
                                    "name": "Identifier",
                                    "src": "5873:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2642,
                                      "type": "uint256",
                                      "value": "numMin"
                                    },
                                    "id": 2669,
                                    "name": "Identifier",
                                    "src": "5879:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2591,
                                      "type": "uint256",
                                      "value": "denMax"
                                    },
                                    "id": 2670,
                                    "name": "Identifier",
                                    "src": "5887:6:11"
                                  }
                                ],
                                "id": 2671,
                                "name": "FunctionCall",
                                "src": "5863:31:11"
                              }
                            ],
                            "id": 2672,
                            "name": "Return",
                            "src": "5856:38:11"
                          }
                        ],
                        "id": 2673,
                        "name": "Block",
                        "src": "5848:53:11"
                      }
                    ],
                    "id": 2674,
                    "name": "IfStatement",
                    "src": "5812:89:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2676
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "factor",
                          "overrides": null,
                          "scope": 2787,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2675,
                            "name": "ElementaryTypeName",
                            "src": "6019:7:11"
                          }
                        ],
                        "id": 2676,
                        "name": "VariableDeclaration",
                        "src": "6019:14:11"
                      },
                      {
                        "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": 2642,
                              "type": "uint256",
                              "value": "numMin"
                            },
                            "id": 2677,
                            "name": "Identifier",
                            "src": "6036:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2678,
                            "name": "Literal",
                            "src": "6045:1:11"
                          }
                        ],
                        "id": 2679,
                        "name": "BinaryOperation",
                        "src": "6036:10:11"
                      }
                    ],
                    "id": 2680,
                    "name": "VariableDeclarationStatement",
                    "src": "6019:27:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2676,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2681,
                            "name": "Identifier",
                            "src": "6052:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "uint256",
                              "value": "MAX_BEFORE_SQUARE"
                            },
                            "id": 2682,
                            "name": "Identifier",
                            "src": "6062:17:11"
                          }
                        ],
                        "id": 2683,
                        "name": "Assignment",
                        "src": "6052:27:11"
                      }
                    ],
                    "id": 2684,
                    "name": "ExpressionStatement",
                    "src": "6052:27:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2676,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2685,
                            "name": "Identifier",
                            "src": "6085:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2686,
                            "name": "Literal",
                            "src": "6095:1:11"
                          }
                        ],
                        "id": 2687,
                        "name": "Assignment",
                        "src": "6085:11:11"
                      }
                    ],
                    "id": 2688,
                    "name": "ExpressionStatement",
                    "src": "6085:11:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2689,
                            "name": "Identifier",
                            "src": "6102:4:11"
                          },
                          {
                            "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": 2638,
                                  "type": "uint256",
                                  "value": "numMax"
                                },
                                "id": 2690,
                                "name": "Identifier",
                                "src": "6109:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 2691,
                                "name": "Literal",
                                "src": "6118:1:11"
                              }
                            ],
                            "id": 2692,
                            "name": "BinaryOperation",
                            "src": "6109:10:11"
                          }
                        ],
                        "id": 2693,
                        "name": "Assignment",
                        "src": "6102:17:11"
                      }
                    ],
                    "id": 2694,
                    "name": "ExpressionStatement",
                    "src": "6102:17:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2695,
                            "name": "Identifier",
                            "src": "6125:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "uint256",
                              "value": "MAX_BEFORE_SQUARE"
                            },
                            "id": 2696,
                            "name": "Identifier",
                            "src": "6133:17:11"
                          }
                        ],
                        "id": 2697,
                        "name": "Assignment",
                        "src": "6125:25:11"
                      }
                    ],
                    "id": 2698,
                    "name": "ExpressionStatement",
                    "src": "6125:25:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2699,
                            "name": "Identifier",
                            "src": "6156:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2700,
                            "name": "Literal",
                            "src": "6164:1:11"
                          }
                        ],
                        "id": 2701,
                        "name": "Assignment",
                        "src": "6156:9:11"
                      }
                    ],
                    "id": 2702,
                    "name": "ExpressionStatement",
                    "src": "6156:9:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2259,
                                  "type": "uint256",
                                  "value": "MAX_UINT"
                                },
                                "id": 2703,
                                "name": "Identifier",
                                "src": "6174:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2676,
                                  "type": "uint256",
                                  "value": "factor"
                                },
                                "id": 2704,
                                "name": "Identifier",
                                "src": "6185:6:11"
                              }
                            ],
                            "id": 2705,
                            "name": "BinaryOperation",
                            "src": "6174:17:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2706,
                            "name": "Identifier",
                            "src": "6195:4:11"
                          }
                        ],
                        "id": 2707,
                        "name": "BinaryOperation",
                        "src": "6174:25:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "*=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2676,
                                      "type": "uint256",
                                      "value": "factor"
                                    },
                                    "id": 2708,
                                    "name": "Identifier",
                                    "src": "6213:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2659,
                                      "type": "uint256",
                                      "value": "temp"
                                    },
                                    "id": 2709,
                                    "name": "Identifier",
                                    "src": "6223:4:11"
                                  }
                                ],
                                "id": 2710,
                                "name": "Assignment",
                                "src": "6213:14:11"
                              }
                            ],
                            "id": 2711,
                            "name": "ExpressionStatement",
                            "src": "6213:14:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2612,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2712,
                                    "name": "Identifier",
                                    "src": "6236:5:11"
                                  },
                                  {
                                    "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": 2638,
                                          "type": "uint256",
                                          "value": "numMax"
                                        },
                                        "id": 2713,
                                        "name": "Identifier",
                                        "src": "6244:6:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2676,
                                          "type": "uint256",
                                          "value": "factor"
                                        },
                                        "id": 2714,
                                        "name": "Identifier",
                                        "src": "6253:6:11"
                                      }
                                    ],
                                    "id": 2715,
                                    "name": "BinaryOperation",
                                    "src": "6244:15:11"
                                  }
                                ],
                                "id": 2716,
                                "name": "Assignment",
                                "src": "6236:23:11"
                              }
                            ],
                            "id": 2717,
                            "name": "ExpressionStatement",
                            "src": "6236:23:11"
                          },
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2612,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 2718,
                                    "name": "Identifier",
                                    "src": "6270:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2277,
                                      "type": "uint256",
                                      "value": "MAX_ERROR_BEFORE_DIV"
                                    },
                                    "id": 2719,
                                    "name": "Identifier",
                                    "src": "6278:20:11"
                                  }
                                ],
                                "id": 2720,
                                "name": "BinaryOperation",
                                "src": "6270:28:11"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2612,
                                              "type": "uint256",
                                              "value": "value"
                                            },
                                            "id": 2721,
                                            "name": "Identifier",
                                            "src": "6316:5:11"
                                          },
                                          {
                                            "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": "mul",
                                                  "referencedDeclaration": 237,
                                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2612,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 2722,
                                                    "name": "Identifier",
                                                    "src": "6324:5:11"
                                                  }
                                                ],
                                                "id": 2723,
                                                "name": "MemberAccess",
                                                "src": "6324:9:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2642,
                                                  "type": "uint256",
                                                  "value": "numMin"
                                                },
                                                "id": 2724,
                                                "name": "Identifier",
                                                "src": "6334:6:11"
                                              }
                                            ],
                                            "id": 2725,
                                            "name": "FunctionCall",
                                            "src": "6324:17:11"
                                          }
                                        ],
                                        "id": 2726,
                                        "name": "Assignment",
                                        "src": "6316:25:11"
                                      }
                                    ],
                                    "id": 2727,
                                    "name": "ExpressionStatement",
                                    "src": "6316:25:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "/=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2612,
                                              "type": "uint256",
                                              "value": "value"
                                            },
                                            "id": 2728,
                                            "name": "Identifier",
                                            "src": "6351:5:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2595,
                                              "type": "uint256",
                                              "value": "denMin"
                                            },
                                            "id": 2729,
                                            "name": "Identifier",
                                            "src": "6360:6:11"
                                          }
                                        ],
                                        "id": 2730,
                                        "name": "Assignment",
                                        "src": "6351:15:11"
                                      }
                                    ],
                                    "id": 2731,
                                    "name": "ExpressionStatement",
                                    "src": "6351:15:11"
                                  },
                                  {
                                    "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_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": ">",
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2612,
                                                  "type": "uint256",
                                                  "value": "value"
                                                },
                                                "id": 2732,
                                                "name": "Identifier",
                                                "src": "6379:5:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "30",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 0",
                                                  "value": "0"
                                                },
                                                "id": 2733,
                                                "name": "Literal",
                                                "src": "6387:1:11"
                                              }
                                            ],
                                            "id": 2734,
                                            "name": "BinaryOperation",
                                            "src": "6379:9:11"
                                          },
                                          {
                                            "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,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2259,
                                                      "type": "uint256",
                                                      "value": "MAX_UINT"
                                                    },
                                                    "id": 2735,
                                                    "name": "Identifier",
                                                    "src": "6392:8:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2612,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 2736,
                                                    "name": "Identifier",
                                                    "src": "6403:5:11"
                                                  }
                                                ],
                                                "id": 2737,
                                                "name": "BinaryOperation",
                                                "src": "6392:16:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2676,
                                                  "type": "uint256",
                                                  "value": "factor"
                                                },
                                                "id": 2738,
                                                "name": "Identifier",
                                                "src": "6412:6:11"
                                              }
                                            ],
                                            "id": 2739,
                                            "name": "BinaryOperation",
                                            "src": "6392:26:11"
                                          }
                                        ],
                                        "id": 2740,
                                        "name": "BinaryOperation",
                                        "src": "6379:39:11"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "*=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2612,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 2741,
                                                    "name": "Identifier",
                                                    "src": "6440:5:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2676,
                                                      "type": "uint256",
                                                      "value": "factor"
                                                    },
                                                    "id": 2742,
                                                    "name": "Identifier",
                                                    "src": "6449:6:11"
                                                  }
                                                ],
                                                "id": 2743,
                                                "name": "Assignment",
                                                "src": "6440:15:11"
                                              }
                                            ],
                                            "id": 2744,
                                            "name": "ExpressionStatement",
                                            "src": "6440:15:11"
                                          },
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "/=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2612,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 2745,
                                                    "name": "Identifier",
                                                    "src": "6467:5:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2591,
                                                      "type": "uint256",
                                                      "value": "denMax"
                                                    },
                                                    "id": 2746,
                                                    "name": "Identifier",
                                                    "src": "6476:6:11"
                                                  }
                                                ],
                                                "id": 2747,
                                                "name": "Assignment",
                                                "src": "6467:15:11"
                                              }
                                            ],
                                            "id": 2748,
                                            "name": "ExpressionStatement",
                                            "src": "6467:15:11"
                                          },
                                          {
                                            "attributes": {
                                              "functionReturnParameters": 2563
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2612,
                                                  "type": "uint256",
                                                  "value": "value"
                                                },
                                                "id": 2749,
                                                "name": "Identifier",
                                                "src": "6501:5:11"
                                              }
                                            ],
                                            "id": 2750,
                                            "name": "Return",
                                            "src": "6494:12:11"
                                          }
                                        ],
                                        "id": 2751,
                                        "name": "Block",
                                        "src": "6428:89:11"
                                      }
                                    ],
                                    "id": 2752,
                                    "name": "IfStatement",
                                    "src": "6376:141:11"
                                  }
                                ],
                                "id": 2753,
                                "name": "Block",
                                "src": "6306:219:11"
                              }
                            ],
                            "id": 2754,
                            "name": "IfStatement",
                            "src": "6267:258:11"
                          }
                        ],
                        "id": 2755,
                        "name": "Block",
                        "src": "6205:326:11"
                      }
                    ],
                    "id": 2756,
                    "name": "IfStatement",
                    "src": "6171:360:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2676,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2757,
                            "name": "Identifier",
                            "src": "6624:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2595,
                              "type": "uint256",
                              "value": "denMin"
                            },
                            "id": 2758,
                            "name": "Identifier",
                            "src": "6633:6:11"
                          }
                        ],
                        "id": 2759,
                        "name": "Assignment",
                        "src": "6624:15:11"
                      }
                    ],
                    "id": 2760,
                    "name": "ExpressionStatement",
                    "src": "6624:15:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2676,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2761,
                            "name": "Identifier",
                            "src": "6645:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "uint256",
                              "value": "MAX_BEFORE_SQUARE"
                            },
                            "id": 2762,
                            "name": "Identifier",
                            "src": "6655:17:11"
                          }
                        ],
                        "id": 2763,
                        "name": "Assignment",
                        "src": "6645:27:11"
                      }
                    ],
                    "id": 2764,
                    "name": "ExpressionStatement",
                    "src": "6645:27:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2765,
                            "name": "Identifier",
                            "src": "6678:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2591,
                              "type": "uint256",
                              "value": "denMax"
                            },
                            "id": 2766,
                            "name": "Identifier",
                            "src": "6685:6:11"
                          }
                        ],
                        "id": 2767,
                        "name": "Assignment",
                        "src": "6678:13:11"
                      }
                    ],
                    "id": 2768,
                    "name": "ExpressionStatement",
                    "src": "6678:13:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2769,
                            "name": "Identifier",
                            "src": "6746:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2267,
                                  "type": "uint256",
                                  "value": "MAX_BEFORE_SQUARE"
                                },
                                "id": 2770,
                                "name": "Identifier",
                                "src": "6754:17:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 2771,
                                "name": "Literal",
                                "src": "6774:1:11"
                              }
                            ],
                            "id": 2772,
                            "name": "BinaryOperation",
                            "src": "6754:21:11"
                          }
                        ],
                        "id": 2773,
                        "name": "Assignment",
                        "src": "6746:29:11"
                      }
                    ],
                    "id": 2774,
                    "name": "ExpressionStatement",
                    "src": "6746:29:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2676,
                              "type": "uint256",
                              "value": "factor"
                            },
                            "id": 2775,
                            "name": "Identifier",
                            "src": "6781:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2659,
                              "type": "uint256",
                              "value": "temp"
                            },
                            "id": 2776,
                            "name": "Identifier",
                            "src": "6791:4:11"
                          }
                        ],
                        "id": 2777,
                        "name": "Assignment",
                        "src": "6781:14:11"
                      }
                    ],
                    "id": 2778,
                    "name": "ExpressionStatement",
                    "src": "6781:14:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2563
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2493,
                              "type": "function (uint256,uint256,uint256) pure returns (uint256)",
                              "value": "bigDiv2x1"
                            },
                            "id": 2779,
                            "name": "Identifier",
                            "src": "6808:9:11"
                          },
                          {
                            "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": 2638,
                                  "type": "uint256",
                                  "value": "numMax"
                                },
                                "id": 2780,
                                "name": "Identifier",
                                "src": "6818:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2676,
                                  "type": "uint256",
                                  "value": "factor"
                                },
                                "id": 2781,
                                "name": "Identifier",
                                "src": "6827:6:11"
                              }
                            ],
                            "id": 2782,
                            "name": "BinaryOperation",
                            "src": "6818:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2642,
                              "type": "uint256",
                              "value": "numMin"
                            },
                            "id": 2783,
                            "name": "Identifier",
                            "src": "6835:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2259,
                              "type": "uint256",
                              "value": "MAX_UINT"
                            },
                            "id": 2784,
                            "name": "Identifier",
                            "src": "6843:8:11"
                          }
                        ],
                        "id": 2785,
                        "name": "FunctionCall",
                        "src": "6808:44:11"
                      }
                    ],
                    "id": 2786,
                    "name": "Return",
                    "src": "6801:51:11"
                  }
                ],
                "id": 2787,
                "name": "Block",
                "src": "4867:1990:11"
              }
            ],
            "id": 2788,
            "name": "FunctionDefinition",
            "src": "4730:2127:11"
          }
        ],
        "id": 2789,
        "name": "ContractDefinition",
        "src": "587:6272:11"
      }
    ],
    "id": 2790,
    "name": "SourceUnit",
    "src": "32:6827:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-07-08T17:04:13.767Z",
  "devdoc": {
    "details": "Results may be off by 1 + 0.000001% for 2x1 calls and 2 + 0.00001% for 2x2 calls. Do not use if your contract expects very small result values to be accurate.",
    "methods": {},
    "stateVariables": {
      "MAX_BEFORE_SQUARE": {
        "details": "When multiplying 2 terms <= this value the result won't overflow"
      },
      "MAX_ERROR": {
        "details": "The max error target is off by 1 plus up to 0.000001% error for bigDiv2x1 and that `* 2` for bigDiv2x2"
      },
      "MAX_ERROR_BEFORE_DIV": {
        "details": "A larger error threshold to use when multiple rounding errors may apply"
      },
      "MAX_UINT": {
        "details": "The max possible value"
      }
    },
    "title": "Reduces the size of terms before multiplication, to avoid an overflow, and then restores the proper size after division."
  },
  "userdoc": {
    "methods": {},
    "notice": "This effectively allows us to overflow values in the numerator and/or denominator of a fraction, so long as the end result does not overflow as well."
  }
}