{
  "contractName": "Exponential",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Compound\",\"methods\":{},\"title\":\"Exponential module for storing fixed-decision decimals\"},\"userdoc\":{\"methods\":{},\"notice\":\"Exp is a struct which stores decimals with a fixed precision of 18 decimal places.        Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:        `Exp({mantissa: 5100000000000000000})`.\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol\":\"Exponential\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CarefulMath.sol\":{\"keccak256\":\"0xbeb605bfb980199c42701b9557bcffffa3a845c6386adfc6130568d9f3f38495\",\"urls\":[\"bzz-raw://6595932dbb88fb67d81694ab43f9dd42124e3db91d3b29d8c226577c1a96481a\",\"dweb:/ipfs/Qmb66bD8XPmJBH1eShryFwWUAWEyAx4uHzDdLQs1mZMVTe\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol\":{\"keccak256\":\"0x5578daa70764231d35e464fdb46d473d1a08c727ef5676c7b12015948b218dbf\",\"urls\":[\"bzz-raw://ef86f477727842fea96169716f57a53b1307d9f0d4770d5963c0df0ef029f0d0\",\"dweb:/ipfs/Qmahf4aXZGnMMmuY6gebrTCWd64rPHuToSeqhkeFXL7T62\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a723158209bdbaa12c048d57c0b39a553ae57d246ebb54aa5d8a7374cd4f606433ecc6ca064736f6c634300050c0032",
  "deployedBytecode": "0x6080604052600080fdfea265627a7a723158209bdbaa12c048d57c0b39a553ae57d246ebb54aa5d8a7374cd4f606433ecc6ca064736f6c634300050c0032",
  "sourceMap": "378:7756:8:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;378:7756:8;;;;;;;",
  "deployedSourceMap": "378:7756:8:-;;;;;",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./CarefulMath.sol\";\n\n/**\n * @title Exponential module for storing fixed-decision decimals\n * @author Compound\n * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\n *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\n *         `Exp({mantissa: 5100000000000000000})`.\n */\ncontract Exponential is CarefulMath {\n    uint256 constant expScale = 1e18;\n    uint256 constant halfExpScale = expScale / 2;\n    uint256 constant mantissaOne = expScale;\n\n    struct Exp {\n        uint256 mantissa;\n    }\n\n    /**\n     * @dev Creates an exponential from numerator and denominator values.\n     *      Note: Returns an error if (`num` * 10e18) > MAX_INT,\n     *            or if `denom` is zero.\n     */\n    function getExp(uint256 num, uint256 denom) internal pure returns (MathError, Exp memory) {\n        (MathError err0, uint256 scaledNumerator) = mulUInt(num, expScale);\n        if (err0 != MathError.NO_ERROR) {\n            return (err0, Exp({mantissa: 0}));\n        }\n\n        (MathError err1, uint256 rational) = divUInt(scaledNumerator, denom);\n        if (err1 != MathError.NO_ERROR) {\n            return (err1, Exp({mantissa: 0}));\n        }\n\n        return (MathError.NO_ERROR, Exp({mantissa: rational}));\n    }\n\n    /**\n     * @dev Adds two exponentials, returning a new exponential.\n     */\n    function addExp(Exp memory a, Exp memory b) internal pure returns (MathError, Exp memory) {\n        (MathError error, uint256 result) = addUInt(a.mantissa, b.mantissa);\n\n        return (error, Exp({mantissa: result}));\n    }\n\n    /**\n     * @dev Subtracts two exponentials, returning a new exponential.\n     */\n    function subExp(Exp memory a, Exp memory b) internal pure returns (MathError, Exp memory) {\n        (MathError error, uint256 result) = subUInt(a.mantissa, b.mantissa);\n\n        return (error, Exp({mantissa: result}));\n    }\n\n    /**\n     * @dev Multiply an Exp by a scalar, returning a new Exp.\n     */\n    function mulScalar(Exp memory a, uint256 scalar) internal pure returns (MathError, Exp memory) {\n        (MathError err0, uint256 scaledMantissa) = mulUInt(a.mantissa, scalar);\n        if (err0 != MathError.NO_ERROR) {\n            return (err0, Exp({mantissa: 0}));\n        }\n\n        return (MathError.NO_ERROR, Exp({mantissa: scaledMantissa}));\n    }\n\n    /**\n     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.\n     */\n    function mulScalarTruncate(Exp memory a, uint256 scalar) internal pure returns (MathError, uint256) {\n        (MathError err, Exp memory product) = mulScalar(a, scalar);\n        if (err != MathError.NO_ERROR) {\n            return (err, 0);\n        }\n\n        return (MathError.NO_ERROR, truncate(product));\n    }\n\n    /**\n     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.\n     */\n    function mulScalarTruncateAddUInt(Exp memory a, uint256 scalar, uint256 addend)\n        internal\n        pure\n        returns (MathError, uint256)\n    {\n        (MathError err, Exp memory product) = mulScalar(a, scalar);\n        if (err != MathError.NO_ERROR) {\n            return (err, 0);\n        }\n\n        return addUInt(truncate(product), addend);\n    }\n\n    /**\n     * @dev Divide an Exp by a scalar, returning a new Exp.\n     */\n    function divScalar(Exp memory a, uint256 scalar) internal pure returns (MathError, Exp memory) {\n        (MathError err0, uint256 descaledMantissa) = divUInt(a.mantissa, scalar);\n        if (err0 != MathError.NO_ERROR) {\n            return (err0, Exp({mantissa: 0}));\n        }\n\n        return (MathError.NO_ERROR, Exp({mantissa: descaledMantissa}));\n    }\n\n    /**\n     * @dev Divide a scalar by an Exp, returning a new Exp.\n     */\n    function divScalarByExp(uint256 scalar, Exp memory divisor) internal pure returns (MathError, Exp memory) {\n        /*\n          We are doing this as:\n          getExp(mulUInt(expScale, scalar), divisor.mantissa)\n\n          How it works:\n          Exp = a / b;\n          Scalar = s;\n          `s / (a / b)` = `b * s / a` and since for an Exp `a = mantissa, b = expScale`\n        */\n        (MathError err0, uint256 numerator) = mulUInt(expScale, scalar);\n        if (err0 != MathError.NO_ERROR) {\n            return (err0, Exp({mantissa: 0}));\n        }\n        return getExp(numerator, divisor.mantissa);\n    }\n\n    /**\n     * @dev Divide a scalar by an Exp, then truncate to return an unsigned integer.\n     */\n    function divScalarByExpTruncate(uint256 scalar, Exp memory divisor) internal pure returns (MathError, uint256) {\n        (MathError err, Exp memory fraction) = divScalarByExp(scalar, divisor);\n        if (err != MathError.NO_ERROR) {\n            return (err, 0);\n        }\n\n        return (MathError.NO_ERROR, truncate(fraction));\n    }\n\n    /**\n     * @dev Multiplies two exponentials, returning a new exponential.\n     */\n    function mulExp(Exp memory a, Exp memory b) internal pure returns (MathError, Exp memory) {\n        (MathError err0, uint256 doubleScaledProduct) = mulUInt(a.mantissa, b.mantissa);\n        if (err0 != MathError.NO_ERROR) {\n            return (err0, Exp({mantissa: 0}));\n        }\n\n        // We add half the scale before dividing so that we get rounding instead of truncation.\n        //  See \"Listing 6\" and text above it at https://accu.org/index.php/journals/1717\n        // Without this change, a result like 6.6...e-19 will be truncated to 0 instead of being rounded to 1e-18.\n        (MathError err1, uint256 doubleScaledProductWithHalfScale) = addUInt(halfExpScale, doubleScaledProduct);\n        if (err1 != MathError.NO_ERROR) {\n            return (err1, Exp({mantissa: 0}));\n        }\n\n        (MathError err2, uint256 product) = divUInt(doubleScaledProductWithHalfScale, expScale);\n        // The only error `div` can return is MathError.DIVISION_BY_ZERO but we control `expScale` and it is not zero.\n        assert(err2 == MathError.NO_ERROR);\n\n        return (MathError.NO_ERROR, Exp({mantissa: product}));\n    }\n\n    /**\n     * @dev Multiplies two exponentials given their mantissas, returning a new exponential.\n     */\n    function mulExp(uint256 a, uint256 b) internal pure returns (MathError, Exp memory) {\n        return mulExp(Exp({mantissa: a}), Exp({mantissa: b}));\n    }\n\n    /**\n     * @dev Multiplies three exponentials, returning a new exponential.\n     */\n    function mulExp3(Exp memory a, Exp memory b, Exp memory c) internal pure returns (MathError, Exp memory) {\n        (MathError err, Exp memory ab) = mulExp(a, b);\n        if (err != MathError.NO_ERROR) {\n            return (err, ab);\n        }\n        return mulExp(ab, c);\n    }\n\n    /**\n     * @dev Divides two exponentials, returning a new exponential.\n     *     (a/scale) / (b/scale) = (a/scale) * (scale/b) = a/b,\n     *  which we can scale as an Exp by calling getExp(a.mantissa, b.mantissa)\n     */\n    function divExp(Exp memory a, Exp memory b) internal pure returns (MathError, Exp memory) {\n        return getExp(a.mantissa, b.mantissa);\n    }\n\n    /**\n     * @dev Truncates the given exp to a whole number value.\n     *      For example, truncate(Exp{mantissa: 15 * expScale}) = 15\n     */\n    function truncate(Exp memory exp) internal pure returns (uint256) {\n        // Note: We are not using careful math here as we're performing a division that cannot fail\n        return exp.mantissa / expScale;\n    }\n\n    /**\n     * @dev Checks if first Exp is less than second Exp.\n     */\n    function lessThanExp(Exp memory left, Exp memory right) internal pure returns (bool) {\n        return left.mantissa < right.mantissa; //TODO: Add some simple tests and this in another PR yo.\n    }\n\n    /**\n     * @dev Checks if left Exp <= right Exp.\n     */\n    function lessThanOrEqualExp(Exp memory left, Exp memory right) internal pure returns (bool) {\n        return left.mantissa <= right.mantissa;\n    }\n\n    /**\n     * @dev returns true if Exp is exactly zero\n     */\n    function isZeroExp(Exp memory value) internal pure returns (bool) {\n        return value.mantissa == 0;\n    }\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol",
    "exportedSymbols": {
      "Exponential": [
        5798
      ]
    },
    "id": 5799,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5209,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CarefulMath.sol",
        "file": "./CarefulMath.sol",
        "id": 5210,
        "nodeType": "ImportDirective",
        "scope": 5799,
        "sourceUnit": 4608,
        "src": "25:27:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5211,
              "name": "CarefulMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4607,
              "src": "402:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CarefulMath_$4607",
                "typeString": "contract CarefulMath"
              }
            },
            "id": 5212,
            "nodeType": "InheritanceSpecifier",
            "src": "402:11:8"
          }
        ],
        "contractDependencies": [
          4607
        ],
        "contractKind": "contract",
        "documentation": "@title Exponential module for storing fixed-decision decimals\n@author Compound\n@notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\n        Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\n        `Exp({mantissa: 5100000000000000000})`.",
        "fullyImplemented": true,
        "id": 5798,
        "linearizedBaseContracts": [
          5798,
          4607
        ],
        "name": "Exponential",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 5215,
            "name": "expScale",
            "nodeType": "VariableDeclaration",
            "scope": 5798,
            "src": "420:32:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5213,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "420:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 5214,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "448:4:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5220,
            "name": "halfExpScale",
            "nodeType": "VariableDeclaration",
            "scope": 5798,
            "src": "458:44:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5216,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "458:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 5219,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "id": 5217,
                "name": "expScale",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 5215,
                "src": "490:8:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "/",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "32",
                "id": 5218,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "501:1:8",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "2"
              },
              "src": "490:12:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5223,
            "name": "mantissaOne",
            "nodeType": "VariableDeclaration",
            "scope": 5798,
            "src": "508:39:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5221,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "508:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "id": 5222,
              "name": "expScale",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5215,
              "src": "539:8:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "Exponential.Exp",
            "id": 5226,
            "members": [
              {
                "constant": false,
                "id": 5225,
                "name": "mantissa",
                "nodeType": "VariableDeclaration",
                "scope": 5226,
                "src": "575:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 5224,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "575:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Exp",
            "nodeType": "StructDefinition",
            "scope": 5798,
            "src": "554:44:8",
            "visibility": "public"
          },
          {
            "body": {
              "id": 5286,
              "nodeType": "Block",
              "src": "890:425:8",
              "statements": [
                {
                  "assignments": [
                    5238,
                    5240
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5238,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "901:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5237,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "901:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5240,
                      "name": "scaledNumerator",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "917:23:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5239,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "917:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5245,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5242,
                        "name": "num",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "952:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5243,
                        "name": "expScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5215,
                        "src": "957:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5241,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "944:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "944:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "900:66:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5246,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5238,
                      "src": "980:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5247,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "988:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "988:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "980:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5257,
                  "nodeType": "IfStatement",
                  "src": "976:90:8",
                  "trueBody": {
                    "id": 5256,
                    "nodeType": "Block",
                    "src": "1008:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5250,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5238,
                              "src": "1030:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5252,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1051:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5251,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "1036:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "1036:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5254,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1029:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5236,
                        "id": 5255,
                        "nodeType": "Return",
                        "src": "1022:33:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5259,
                    5261
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5259,
                      "name": "err1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "1077:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5258,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "1077:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5261,
                      "name": "rational",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "1093:16:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5260,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1093:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5266,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5263,
                        "name": "scaledNumerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5240,
                        "src": "1121:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5264,
                        "name": "denom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5230,
                        "src": "1138:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5262,
                      "name": "divUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "1113:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1113:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1076:68:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5267,
                      "name": "err1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5259,
                      "src": "1158:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5268,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "1166:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1166:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "1158:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5278,
                  "nodeType": "IfStatement",
                  "src": "1154:90:8",
                  "trueBody": {
                    "id": 5277,
                    "nodeType": "Block",
                    "src": "1186:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5271,
                              "name": "err1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5259,
                              "src": "1208:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1229:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5272,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "1214:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5274,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "1214:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5275,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1207:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5236,
                        "id": 5276,
                        "nodeType": "Return",
                        "src": "1200:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5279,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "1262:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1262:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5282,
                            "name": "rational",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5261,
                            "src": "1297:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5281,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "1282:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "1282:25:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5284,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1261:47:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5236,
                  "id": 5285,
                  "nodeType": "Return",
                  "src": "1254:54:8"
                }
              ]
            },
            "documentation": "@dev Creates an exponential from numerator and denominator values.\n     Note: Returns an error if (`num` * 10e18) > MAX_INT,\n           or if `denom` is zero.",
            "id": 5287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5228,
                  "name": "num",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "816:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5230,
                  "name": "denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "829:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5229,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "829:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "815:28:8"
            },
            "returnParameters": {
              "id": 5236,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5233,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "867:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5232,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "867:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5235,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "878:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5234,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "878:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "866:23:8"
            },
            "scope": 5798,
            "src": "800:515:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5315,
              "nodeType": "Block",
              "src": "1491:134:8",
              "statements": [
                {
                  "assignments": [
                    5299,
                    5301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5299,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 5315,
                      "src": "1502:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5298,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "1502:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5301,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 5315,
                      "src": "1519:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5300,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1519:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5308,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5303,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5289,
                          "src": "1545:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5304,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1545:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5305,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5291,
                          "src": "1557:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1557:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5302,
                      "name": "addUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4568,
                      "src": "1537:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1537:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1501:67:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5309,
                        "name": "error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5299,
                        "src": "1587:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5311,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5301,
                            "src": "1609:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5310,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "1594:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "1594:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5313,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1586:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5297,
                  "id": 5314,
                  "nodeType": "Return",
                  "src": "1579:39:8"
                }
              ]
            },
            "documentation": "@dev Adds two exponentials, returning a new exponential.",
            "id": 5316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5289,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1417:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5288,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1417:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5291,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1431:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5290,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1431:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1416:28:8"
            },
            "returnParameters": {
              "id": 5297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5294,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1468:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5293,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "1468:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5296,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1479:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5295,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1479:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1467:23:8"
            },
            "scope": 5798,
            "src": "1401:224:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5344,
              "nodeType": "Block",
              "src": "1806:134:8",
              "statements": [
                {
                  "assignments": [
                    5328,
                    5330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5328,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 5344,
                      "src": "1817:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5327,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "1817:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5330,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 5344,
                      "src": "1834:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1834:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5337,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5332,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5318,
                          "src": "1860:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5333,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1860:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5334,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5320,
                          "src": "1872:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5335,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1872:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5331,
                      "name": "subUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4534,
                      "src": "1852:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1852:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1816:67:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5338,
                        "name": "error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5328,
                        "src": "1902:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5340,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5330,
                            "src": "1924:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5339,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "1909:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "1909:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5342,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1901:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5326,
                  "id": 5343,
                  "nodeType": "Return",
                  "src": "1894:39:8"
                }
              ]
            },
            "documentation": "@dev Subtracts two exponentials, returning a new exponential.",
            "id": 5345,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "subExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5321,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5318,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1732:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5317,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1732:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5320,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1746:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5319,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1746:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1731:28:8"
            },
            "returnParameters": {
              "id": 5326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5323,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1783:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5322,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "1783:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1794:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5324,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1794:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1782:23:8"
            },
            "scope": 5798,
            "src": "1716:224:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5385,
              "nodeType": "Block",
              "src": "2119:257:8",
              "statements": [
                {
                  "assignments": [
                    5357,
                    5359
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5357,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5385,
                      "src": "2130:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5356,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "2130:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5359,
                      "name": "scaledMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 5385,
                      "src": "2146:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5358,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2146:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5365,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5361,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5347,
                          "src": "2180:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5362,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "2180:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5363,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5349,
                        "src": "2192:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5360,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "2172:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2172:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2129:70:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5366,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5357,
                      "src": "2213:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5367,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "2221:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2221:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "2213:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5377,
                  "nodeType": "IfStatement",
                  "src": "2209:90:8",
                  "trueBody": {
                    "id": 5376,
                    "nodeType": "Block",
                    "src": "2241:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5370,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5357,
                              "src": "2263:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2284:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5371,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "2269:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "2269:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5374,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2262:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5355,
                        "id": 5375,
                        "nodeType": "Return",
                        "src": "2255:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5378,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "2317:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2317:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5381,
                            "name": "scaledMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5359,
                            "src": "2352:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5380,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "2337:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "2337:31:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5383,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2316:53:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5355,
                  "id": 5384,
                  "nodeType": "Return",
                  "src": "2309:60:8"
                }
              ]
            },
            "documentation": "@dev Multiply an Exp by a scalar, returning a new Exp.",
            "id": 5386,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulScalar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5347,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2043:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5346,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2043:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5349,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2057:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2057:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2042:30:8"
            },
            "returnParameters": {
              "id": 5355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5352,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2096:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5351,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "2096:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5354,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2107:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5353,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2107:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2095:23:8"
            },
            "scope": 5798,
            "src": "2024:352:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5423,
              "nodeType": "Block",
              "src": "2584:212:8",
              "statements": [
                {
                  "assignments": [
                    5398,
                    5400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5398,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5423,
                      "src": "2595:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5397,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "2595:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5400,
                      "name": "product",
                      "nodeType": "VariableDeclaration",
                      "scope": 5423,
                      "src": "2610:18:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5399,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "2610:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5405,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5402,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5388,
                        "src": "2642:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5403,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5390,
                        "src": "2645:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5401,
                      "name": "mulScalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "2632:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2632:20:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2594:58:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5406,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5398,
                      "src": "2666:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5407,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "2673:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5408,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2673:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "2666:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5415,
                  "nodeType": "IfStatement",
                  "src": "2662:71:8",
                  "trueBody": {
                    "id": 5414,
                    "nodeType": "Block",
                    "src": "2693:40:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5410,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5398,
                              "src": "2715:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2720:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 5412,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2714:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 5396,
                        "id": 5413,
                        "nodeType": "Return",
                        "src": "2707:15:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5416,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "2751:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2751:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5419,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5400,
                            "src": "2780:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          ],
                          "id": 5418,
                          "name": "truncate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5752,
                          "src": "2771:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct Exponential.Exp memory) pure returns (uint256)"
                          }
                        },
                        "id": 5420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2771:17:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5421,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2750:39:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 5396,
                  "id": 5422,
                  "nodeType": "Return",
                  "src": "2743:46:8"
                }
              ]
            },
            "documentation": "@dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.",
            "id": 5424,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulScalarTruncate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5388,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2511:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5387,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2511:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5390,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2525:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5389,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2525:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2510:30:8"
            },
            "returnParameters": {
              "id": 5396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5393,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2564:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5392,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "2564:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5395,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2575:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5394,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2575:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2563:20:8"
            },
            "scope": 5798,
            "src": "2484:312:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5463,
              "nodeType": "Block",
              "src": "3087:207:8",
              "statements": [
                {
                  "assignments": [
                    5438,
                    5440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5438,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5463,
                      "src": "3098:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5437,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "3098:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5440,
                      "name": "product",
                      "nodeType": "VariableDeclaration",
                      "scope": 5463,
                      "src": "3113:18:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5439,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "3113:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5445,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5442,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5426,
                        "src": "3145:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5443,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5428,
                        "src": "3148:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5441,
                      "name": "mulScalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "3135:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3135:20:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3097:58:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5446,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5438,
                      "src": "3169:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5447,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "3176:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3176:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "3169:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5455,
                  "nodeType": "IfStatement",
                  "src": "3165:71:8",
                  "trueBody": {
                    "id": 5454,
                    "nodeType": "Block",
                    "src": "3196:40:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5450,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "3218:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5451,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3223:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 5452,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3217:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 5436,
                        "id": 5453,
                        "nodeType": "Return",
                        "src": "3210:15:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5458,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5440,
                            "src": "3270:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          ],
                          "id": 5457,
                          "name": "truncate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5752,
                          "src": "3261:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct Exponential.Exp memory) pure returns (uint256)"
                          }
                        },
                        "id": 5459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3261:17:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5460,
                        "name": "addend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5430,
                        "src": "3280:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5456,
                      "name": "addUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4568,
                      "src": "3253:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3253:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 5436,
                  "id": 5462,
                  "nodeType": "Return",
                  "src": "3246:41:8"
                }
              ]
            },
            "documentation": "@dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.",
            "id": 5464,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulScalarTruncateAddUInt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5426,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "2970:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5425,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2970:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5428,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "2984:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5427,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2984:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5430,
                  "name": "addend",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3000:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3000:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2969:46:8"
            },
            "returnParameters": {
              "id": 5436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5433,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3063:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5432,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "3063:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5435,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3074:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3074:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3062:20:8"
            },
            "scope": 5798,
            "src": "2936:358:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5504,
              "nodeType": "Block",
              "src": "3471:261:8",
              "statements": [
                {
                  "assignments": [
                    5476,
                    5478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5476,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5504,
                      "src": "3482:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5475,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "3482:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5478,
                      "name": "descaledMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 5504,
                      "src": "3498:24:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5477,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3498:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5480,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5466,
                          "src": "3534:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5481,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "3534:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5482,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "3546:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5479,
                      "name": "divUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "3526:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3526:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3481:72:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5485,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5476,
                      "src": "3567:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5486,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "3575:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5487,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3575:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "3567:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5496,
                  "nodeType": "IfStatement",
                  "src": "3563:90:8",
                  "trueBody": {
                    "id": 5495,
                    "nodeType": "Block",
                    "src": "3595:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5489,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "3617:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3638:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5490,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "3623:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "3623:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5493,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3616:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5474,
                        "id": 5494,
                        "nodeType": "Return",
                        "src": "3609:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5497,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "3671:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3671:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5500,
                            "name": "descaledMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5478,
                            "src": "3706:16:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5499,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "3691:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "3691:33:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5502,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3670:55:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5474,
                  "id": 5503,
                  "nodeType": "Return",
                  "src": "3663:62:8"
                }
              ]
            },
            "documentation": "@dev Divide an Exp by a scalar, returning a new Exp.",
            "id": 5505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divScalar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5466,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3395:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5465,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3395:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5468,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3409:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3409:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3394:30:8"
            },
            "returnParameters": {
              "id": 5474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5471,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3448:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5470,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "3448:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5473,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3459:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5472,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3459:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3447:23:8"
            },
            "scope": 5798,
            "src": "3376:356:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5543,
              "nodeType": "Block",
              "src": "3920:505:8",
              "statements": [
                {
                  "assignments": [
                    5517,
                    5519
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5517,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5543,
                      "src": "4205:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5516,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "4205:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5519,
                      "name": "numerator",
                      "nodeType": "VariableDeclaration",
                      "scope": 5543,
                      "src": "4221:17:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5518,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4221:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5524,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5521,
                        "name": "expScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5215,
                        "src": "4250:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5522,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5507,
                        "src": "4260:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5520,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "4242:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4242:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4204:63:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5525,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5517,
                      "src": "4281:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5526,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "4289:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4289:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "4281:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5536,
                  "nodeType": "IfStatement",
                  "src": "4277:90:8",
                  "trueBody": {
                    "id": 5535,
                    "nodeType": "Block",
                    "src": "4309:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5529,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5517,
                              "src": "4331:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5531,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4352:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5530,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "4337:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "4337:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5533,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4330:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5515,
                        "id": 5534,
                        "nodeType": "Return",
                        "src": "4323:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5538,
                        "name": "numerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5519,
                        "src": "4390:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5539,
                          "name": "divisor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5509,
                          "src": "4401:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5540,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "4401:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5537,
                      "name": "getExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5287,
                      "src": "4383:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4383:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5515,
                  "id": 5542,
                  "nodeType": "Return",
                  "src": "4376:42:8"
                }
              ]
            },
            "documentation": "@dev Divide a scalar by an Exp, returning a new Exp.",
            "id": 5544,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divScalarByExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5507,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3838:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5506,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3838:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5509,
                  "name": "divisor",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3854:18:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5508,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3854:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3837:36:8"
            },
            "returnParameters": {
              "id": 5515,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5512,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3897:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5511,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "3897:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5514,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3908:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5513,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3908:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3896:23:8"
            },
            "scope": 5798,
            "src": "3814:611:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5581,
              "nodeType": "Block",
              "src": "4642:225:8",
              "statements": [
                {
                  "assignments": [
                    5556,
                    5558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5556,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5581,
                      "src": "4653:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5555,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "4653:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5558,
                      "name": "fraction",
                      "nodeType": "VariableDeclaration",
                      "scope": 5581,
                      "src": "4668:19:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5557,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "4668:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5563,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5560,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5546,
                        "src": "4706:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5561,
                        "name": "divisor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5548,
                        "src": "4714:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5559,
                      "name": "divScalarByExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5544,
                      "src": "4691:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4691:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4652:70:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5564,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5556,
                      "src": "4736:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5565,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "4743:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5566,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4743:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "4736:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5573,
                  "nodeType": "IfStatement",
                  "src": "4732:71:8",
                  "trueBody": {
                    "id": 5572,
                    "nodeType": "Block",
                    "src": "4763:40:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5568,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5556,
                              "src": "4785:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4790:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 5570,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4784:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 5554,
                        "id": 5571,
                        "nodeType": "Return",
                        "src": "4777:15:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5574,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "4821:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4821:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5577,
                            "name": "fraction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5558,
                            "src": "4850:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          ],
                          "id": 5576,
                          "name": "truncate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5752,
                          "src": "4841:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct Exponential.Exp memory) pure returns (uint256)"
                          }
                        },
                        "id": 5578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4841:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5579,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4820:40:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 5554,
                  "id": 5580,
                  "nodeType": "Return",
                  "src": "4813:47:8"
                }
              ]
            },
            "documentation": "@dev Divide a scalar by an Exp, then truncate to return an unsigned integer.",
            "id": 5582,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divScalarByExpTruncate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5546,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4563:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5545,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4563:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5548,
                  "name": "divisor",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4579:18:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5547,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "4579:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4562:36:8"
            },
            "returnParameters": {
              "id": 5554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5551,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4622:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5550,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "4622:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5553,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4633:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5552,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4633:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4621:20:8"
            },
            "scope": 5798,
            "src": "4531:336:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5660,
              "nodeType": "Block",
              "src": "5049:1034:8",
              "statements": [
                {
                  "assignments": [
                    5594,
                    5596
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5594,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5060:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5593,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "5060:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5596,
                      "name": "doubleScaledProduct",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5076:27:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5595,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5076:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5603,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5598,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5584,
                          "src": "5115:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5599,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "5115:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5600,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5586,
                          "src": "5127:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5601,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "5127:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5597,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "5107:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5107:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5059:79:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5604,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5594,
                      "src": "5152:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5605,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "5160:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5160:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "5152:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5615,
                  "nodeType": "IfStatement",
                  "src": "5148:90:8",
                  "trueBody": {
                    "id": 5614,
                    "nodeType": "Block",
                    "src": "5180:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5608,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "5202:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5610,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5223:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5609,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "5208:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "5208:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5612,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5201:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5592,
                        "id": 5613,
                        "nodeType": "Return",
                        "src": "5194:33:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5617,
                    5619
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5617,
                      "name": "err1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5550:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5616,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "5550:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5619,
                      "name": "doubleScaledProductWithHalfScale",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5566:40:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5618,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5566:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5624,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5621,
                        "name": "halfExpScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5220,
                        "src": "5618:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5622,
                        "name": "doubleScaledProduct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5596,
                        "src": "5632:19:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5620,
                      "name": "addUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4568,
                      "src": "5610:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5610:42:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5549:103:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5625,
                      "name": "err1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5617,
                      "src": "5666:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5626,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "5674:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5674:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "5666:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5636,
                  "nodeType": "IfStatement",
                  "src": "5662:90:8",
                  "trueBody": {
                    "id": 5635,
                    "nodeType": "Block",
                    "src": "5694:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5629,
                              "name": "err1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5617,
                              "src": "5716:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5631,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5737:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5630,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "5722:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "5722:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5633,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5715:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5592,
                        "id": 5634,
                        "nodeType": "Return",
                        "src": "5708:33:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5638,
                    5640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5638,
                      "name": "err2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5763:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5637,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "5763:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5640,
                      "name": "product",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5779:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5639,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5779:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5645,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5642,
                        "name": "doubleScaledProductWithHalfScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5619,
                        "src": "5806:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5643,
                        "name": "expScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5215,
                        "src": "5840:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5641,
                      "name": "divUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "5798:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5798:51:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5762:87:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 5650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5647,
                          "name": "err2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5638,
                          "src": "5985:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5648,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "5993:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 5649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5993:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "5985:26:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5646,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11474,
                      "src": "5978:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5978:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5652,
                  "nodeType": "ExpressionStatement",
                  "src": "5978:34:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5653,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "6031:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6031:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5656,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5640,
                            "src": "6066:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5655,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "6051:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6051:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5658,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "6030:46:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5592,
                  "id": 5659,
                  "nodeType": "Return",
                  "src": "6023:53:8"
                }
              ]
            },
            "documentation": "@dev Multiplies two exponentials, returning a new exponential.",
            "id": 5661,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5584,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "4975:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5583,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "4975:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5586,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "4989:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5585,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "4989:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4974:28:8"
            },
            "returnParameters": {
              "id": 5592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5589,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "5026:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5588,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "5026:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5591,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "5037:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5590,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "5037:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5025:23:8"
            },
            "scope": 5798,
            "src": "4959:1124:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5681,
              "nodeType": "Block",
              "src": "6281:70:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5674,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5663,
                            "src": "6320:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5673,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "6305:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6305:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5677,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5665,
                            "src": "6340:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5676,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "6325:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6325:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5672,
                      "name": "mulExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5661,
                        5682
                      ],
                      "referencedDeclaration": 5661,
                      "src": "6298:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6298:46:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5671,
                  "id": 5680,
                  "nodeType": "Return",
                  "src": "6291:53:8"
                }
              ]
            },
            "documentation": "@dev Multiplies two exponentials given their mantissas, returning a new exponential.",
            "id": 5682,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5663,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6213:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5662,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6213:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5665,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6224:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5664,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6224:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6212:22:8"
            },
            "returnParameters": {
              "id": 5671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6258:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5667,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "6258:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5670,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6269:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5669,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6269:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6257:23:8"
            },
            "scope": 5798,
            "src": "6197:154:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5719,
              "nodeType": "Block",
              "src": "6550:173:8",
              "statements": [
                {
                  "assignments": [
                    5696,
                    5698
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5696,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5719,
                      "src": "6561:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5695,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "6561:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5698,
                      "name": "ab",
                      "nodeType": "VariableDeclaration",
                      "scope": 5719,
                      "src": "6576:13:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5697,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "6576:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5703,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5700,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5684,
                        "src": "6600:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5701,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5686,
                        "src": "6603:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5699,
                      "name": "mulExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5661,
                        5682
                      ],
                      "referencedDeclaration": 5661,
                      "src": "6593:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6593:12:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6560:45:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5704,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5696,
                      "src": "6619:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5705,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "6626:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5706,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6626:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "6619:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5713,
                  "nodeType": "IfStatement",
                  "src": "6615:72:8",
                  "trueBody": {
                    "id": 5712,
                    "nodeType": "Block",
                    "src": "6646:41:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5708,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5696,
                              "src": "6668:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5709,
                              "name": "ab",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5698,
                              "src": "6673:2:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5710,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6667:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5694,
                        "id": 5711,
                        "nodeType": "Return",
                        "src": "6660:16:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5715,
                        "name": "ab",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5698,
                        "src": "6710:2:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5716,
                        "name": "c",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5688,
                        "src": "6714:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5714,
                      "name": "mulExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5661,
                        5682
                      ],
                      "referencedDeclaration": 5661,
                      "src": "6703:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6703:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5694,
                  "id": 5718,
                  "nodeType": "Return",
                  "src": "6696:20:8"
                }
              ]
            },
            "documentation": "@dev Multiplies three exponentials, returning a new exponential.",
            "id": 5720,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulExp3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5684,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6462:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5683,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6462:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5686,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6476:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5685,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6476:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5688,
                  "name": "c",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6490:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5687,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6490:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6461:42:8"
            },
            "returnParameters": {
              "id": 5694,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5691,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6527:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5690,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "6527:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5693,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6538:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5692,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6538:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6526:23:8"
            },
            "scope": 5798,
            "src": "6445:278:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5738,
              "nodeType": "Block",
              "src": "7045:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5732,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5722,
                          "src": "7069:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5733,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "7069:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5734,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5724,
                          "src": "7081:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5735,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "7081:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5731,
                      "name": "getExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5287,
                      "src": "7062:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7062:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5730,
                  "id": 5737,
                  "nodeType": "Return",
                  "src": "7055:37:8"
                }
              ]
            },
            "documentation": "@dev Divides two exponentials, returning a new exponential.\n    (a/scale) / (b/scale) = (a/scale) * (scale/b) = a/b,\n which we can scale as an Exp by calling getExp(a.mantissa, b.mantissa)",
            "id": 5739,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5722,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "6971:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5721,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6971:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5724,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "6985:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5723,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6985:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6970:28:8"
            },
            "returnParameters": {
              "id": 5730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5727,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "7022:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5726,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "7022:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5729,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "7033:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5728,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7033:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7021:23:8"
            },
            "scope": 5798,
            "src": "6955:144:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5751,
              "nodeType": "Block",
              "src": "7317:147:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5746,
                        "name": "exp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5741,
                        "src": "7434:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5747,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7434:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5748,
                      "name": "expScale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5215,
                      "src": "7449:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7434:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5745,
                  "id": 5750,
                  "nodeType": "Return",
                  "src": "7427:30:8"
                }
              ]
            },
            "documentation": "@dev Truncates the given exp to a whole number value.\n     For example, truncate(Exp{mantissa: 15 * expScale}) = 15",
            "id": 5752,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "truncate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5741,
                  "name": "exp",
                  "nodeType": "VariableDeclaration",
                  "scope": 5752,
                  "src": "7269:14:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5740,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7269:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7268:16:8"
            },
            "returnParameters": {
              "id": 5745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5744,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5752,
                  "src": "7308:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5743,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7308:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7307:9:8"
            },
            "scope": 5798,
            "src": "7251:213:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5767,
              "nodeType": "Block",
              "src": "7628:111:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5761,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5754,
                        "src": "7645:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5762,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7645:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5763,
                        "name": "right",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "7661:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5764,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7661:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7645:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5760,
                  "id": 5766,
                  "nodeType": "Return",
                  "src": "7638:37:8"
                }
              ]
            },
            "documentation": "@dev Checks if first Exp is less than second Exp.",
            "id": 5768,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lessThanExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5754,
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 5768,
                  "src": "7564:15:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5753,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7564:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5756,
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 5768,
                  "src": "7581:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5755,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7581:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7563:35:8"
            },
            "returnParameters": {
              "id": 5760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5759,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5768,
                  "src": "7622:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5758,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7622:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7621:6:8"
            },
            "scope": 5798,
            "src": "7543:196:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5783,
              "nodeType": "Block",
              "src": "7898:55:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5777,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5770,
                        "src": "7915:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5778,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7915:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5779,
                        "name": "right",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5772,
                        "src": "7932:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5780,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7932:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7915:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5776,
                  "id": 5782,
                  "nodeType": "Return",
                  "src": "7908:38:8"
                }
              ]
            },
            "documentation": "@dev Checks if left Exp <= right Exp.",
            "id": 5784,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lessThanOrEqualExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5770,
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "7834:15:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5769,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7834:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5772,
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "7851:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5771,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7851:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7833:35:8"
            },
            "returnParameters": {
              "id": 5776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5775,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "7892:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5774,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7892:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7891:6:8"
            },
            "scope": 5798,
            "src": "7806:147:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5796,
              "nodeType": "Block",
              "src": "8089:43:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5791,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5786,
                        "src": "8106:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5792,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "8106:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8124:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8106:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5790,
                  "id": 5795,
                  "nodeType": "Return",
                  "src": "8099:26:8"
                }
              ]
            },
            "documentation": "@dev returns true if Exp is exactly zero",
            "id": 5797,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isZeroExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5786,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "8042:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5785,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "8042:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8041:18:8"
            },
            "returnParameters": {
              "id": 5790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5789,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "8083:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5788,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8083:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8082:6:8"
            },
            "scope": 5798,
            "src": "8023:109:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5799,
        "src": "378:7756:8"
      }
    ],
    "src": "0:8135:8"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol",
    "exportedSymbols": {
      "Exponential": [
        5798
      ]
    },
    "id": 5799,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5209,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CarefulMath.sol",
        "file": "./CarefulMath.sol",
        "id": 5210,
        "nodeType": "ImportDirective",
        "scope": 5799,
        "sourceUnit": 4608,
        "src": "25:27:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5211,
              "name": "CarefulMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4607,
              "src": "402:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CarefulMath_$4607",
                "typeString": "contract CarefulMath"
              }
            },
            "id": 5212,
            "nodeType": "InheritanceSpecifier",
            "src": "402:11:8"
          }
        ],
        "contractDependencies": [
          4607
        ],
        "contractKind": "contract",
        "documentation": "@title Exponential module for storing fixed-decision decimals\n@author Compound\n@notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.\n        Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:\n        `Exp({mantissa: 5100000000000000000})`.",
        "fullyImplemented": true,
        "id": 5798,
        "linearizedBaseContracts": [
          5798,
          4607
        ],
        "name": "Exponential",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 5215,
            "name": "expScale",
            "nodeType": "VariableDeclaration",
            "scope": 5798,
            "src": "420:32:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5213,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "420:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 5214,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "448:4:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5220,
            "name": "halfExpScale",
            "nodeType": "VariableDeclaration",
            "scope": 5798,
            "src": "458:44:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5216,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "458:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 5219,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "id": 5217,
                "name": "expScale",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 5215,
                "src": "490:8:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "/",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "32",
                "id": 5218,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "501:1:8",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "2"
              },
              "src": "490:12:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 5223,
            "name": "mantissaOne",
            "nodeType": "VariableDeclaration",
            "scope": 5798,
            "src": "508:39:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5221,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "508:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "id": 5222,
              "name": "expScale",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5215,
              "src": "539:8:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "Exponential.Exp",
            "id": 5226,
            "members": [
              {
                "constant": false,
                "id": 5225,
                "name": "mantissa",
                "nodeType": "VariableDeclaration",
                "scope": 5226,
                "src": "575:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 5224,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "575:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Exp",
            "nodeType": "StructDefinition",
            "scope": 5798,
            "src": "554:44:8",
            "visibility": "public"
          },
          {
            "body": {
              "id": 5286,
              "nodeType": "Block",
              "src": "890:425:8",
              "statements": [
                {
                  "assignments": [
                    5238,
                    5240
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5238,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "901:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5237,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "901:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5240,
                      "name": "scaledNumerator",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "917:23:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5239,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "917:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5245,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5242,
                        "name": "num",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "952:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5243,
                        "name": "expScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5215,
                        "src": "957:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5241,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "944:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "944:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "900:66:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5246,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5238,
                      "src": "980:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5247,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "988:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "988:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "980:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5257,
                  "nodeType": "IfStatement",
                  "src": "976:90:8",
                  "trueBody": {
                    "id": 5256,
                    "nodeType": "Block",
                    "src": "1008:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5250,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5238,
                              "src": "1030:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5252,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1051:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5251,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "1036:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "1036:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5254,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1029:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5236,
                        "id": 5255,
                        "nodeType": "Return",
                        "src": "1022:33:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5259,
                    5261
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5259,
                      "name": "err1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "1077:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5258,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "1077:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5261,
                      "name": "rational",
                      "nodeType": "VariableDeclaration",
                      "scope": 5286,
                      "src": "1093:16:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5260,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1093:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5266,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5263,
                        "name": "scaledNumerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5240,
                        "src": "1121:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5264,
                        "name": "denom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5230,
                        "src": "1138:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5262,
                      "name": "divUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "1113:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1113:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1076:68:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5267,
                      "name": "err1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5259,
                      "src": "1158:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5268,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "1166:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1166:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "1158:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5278,
                  "nodeType": "IfStatement",
                  "src": "1154:90:8",
                  "trueBody": {
                    "id": 5277,
                    "nodeType": "Block",
                    "src": "1186:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5271,
                              "name": "err1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5259,
                              "src": "1208:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1229:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5272,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "1214:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5274,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "1214:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5275,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1207:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5236,
                        "id": 5276,
                        "nodeType": "Return",
                        "src": "1200:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5279,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "1262:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1262:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5282,
                            "name": "rational",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5261,
                            "src": "1297:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5281,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "1282:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "1282:25:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5284,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1261:47:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5236,
                  "id": 5285,
                  "nodeType": "Return",
                  "src": "1254:54:8"
                }
              ]
            },
            "documentation": "@dev Creates an exponential from numerator and denominator values.\n     Note: Returns an error if (`num` * 10e18) > MAX_INT,\n           or if `denom` is zero.",
            "id": 5287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5228,
                  "name": "num",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "816:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5230,
                  "name": "denom",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "829:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5229,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "829:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "815:28:8"
            },
            "returnParameters": {
              "id": 5236,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5233,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "867:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5232,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "867:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5235,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5287,
                  "src": "878:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5234,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "878:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "866:23:8"
            },
            "scope": 5798,
            "src": "800:515:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5315,
              "nodeType": "Block",
              "src": "1491:134:8",
              "statements": [
                {
                  "assignments": [
                    5299,
                    5301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5299,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 5315,
                      "src": "1502:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5298,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "1502:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5301,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 5315,
                      "src": "1519:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5300,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1519:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5308,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5303,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5289,
                          "src": "1545:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5304,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1545:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5305,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5291,
                          "src": "1557:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1557:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5302,
                      "name": "addUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4568,
                      "src": "1537:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1537:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1501:67:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5309,
                        "name": "error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5299,
                        "src": "1587:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5311,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5301,
                            "src": "1609:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5310,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "1594:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "1594:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5313,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1586:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5297,
                  "id": 5314,
                  "nodeType": "Return",
                  "src": "1579:39:8"
                }
              ]
            },
            "documentation": "@dev Adds two exponentials, returning a new exponential.",
            "id": 5316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5289,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1417:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5288,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1417:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5291,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1431:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5290,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1431:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1416:28:8"
            },
            "returnParameters": {
              "id": 5297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5294,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1468:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5293,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "1468:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5296,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1479:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5295,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1479:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1467:23:8"
            },
            "scope": 5798,
            "src": "1401:224:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5344,
              "nodeType": "Block",
              "src": "1806:134:8",
              "statements": [
                {
                  "assignments": [
                    5328,
                    5330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5328,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 5344,
                      "src": "1817:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5327,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "1817:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5330,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 5344,
                      "src": "1834:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1834:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5337,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5332,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5318,
                          "src": "1860:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5333,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1860:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5334,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5320,
                          "src": "1872:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5335,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "1872:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5331,
                      "name": "subUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4534,
                      "src": "1852:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1852:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1816:67:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5338,
                        "name": "error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5328,
                        "src": "1902:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5340,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5330,
                            "src": "1924:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5339,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "1909:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "1909:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5342,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1901:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5326,
                  "id": 5343,
                  "nodeType": "Return",
                  "src": "1894:39:8"
                }
              ]
            },
            "documentation": "@dev Subtracts two exponentials, returning a new exponential.",
            "id": 5345,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "subExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5321,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5318,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1732:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5317,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1732:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5320,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1746:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5319,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1746:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1731:28:8"
            },
            "returnParameters": {
              "id": 5326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5323,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1783:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5322,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "1783:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5345,
                  "src": "1794:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5324,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "1794:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1782:23:8"
            },
            "scope": 5798,
            "src": "1716:224:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5385,
              "nodeType": "Block",
              "src": "2119:257:8",
              "statements": [
                {
                  "assignments": [
                    5357,
                    5359
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5357,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5385,
                      "src": "2130:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5356,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "2130:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5359,
                      "name": "scaledMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 5385,
                      "src": "2146:22:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5358,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2146:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5365,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5361,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5347,
                          "src": "2180:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5362,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "2180:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5363,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5349,
                        "src": "2192:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5360,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "2172:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2172:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2129:70:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5366,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5357,
                      "src": "2213:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5367,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "2221:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2221:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "2213:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5377,
                  "nodeType": "IfStatement",
                  "src": "2209:90:8",
                  "trueBody": {
                    "id": 5376,
                    "nodeType": "Block",
                    "src": "2241:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5370,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5357,
                              "src": "2263:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2284:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5371,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "2269:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "2269:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5374,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2262:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5355,
                        "id": 5375,
                        "nodeType": "Return",
                        "src": "2255:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5378,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "2317:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2317:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5381,
                            "name": "scaledMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5359,
                            "src": "2352:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5380,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "2337:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "2337:31:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5383,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2316:53:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5355,
                  "id": 5384,
                  "nodeType": "Return",
                  "src": "2309:60:8"
                }
              ]
            },
            "documentation": "@dev Multiply an Exp by a scalar, returning a new Exp.",
            "id": 5386,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulScalar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5347,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2043:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5346,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2043:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5349,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2057:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2057:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2042:30:8"
            },
            "returnParameters": {
              "id": 5355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5352,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2096:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5351,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "2096:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5354,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5386,
                  "src": "2107:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5353,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2107:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2095:23:8"
            },
            "scope": 5798,
            "src": "2024:352:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5423,
              "nodeType": "Block",
              "src": "2584:212:8",
              "statements": [
                {
                  "assignments": [
                    5398,
                    5400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5398,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5423,
                      "src": "2595:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5397,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "2595:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5400,
                      "name": "product",
                      "nodeType": "VariableDeclaration",
                      "scope": 5423,
                      "src": "2610:18:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5399,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "2610:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5405,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5402,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5388,
                        "src": "2642:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5403,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5390,
                        "src": "2645:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5401,
                      "name": "mulScalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "2632:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2632:20:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2594:58:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5406,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5398,
                      "src": "2666:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5407,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "2673:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5408,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2673:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "2666:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5415,
                  "nodeType": "IfStatement",
                  "src": "2662:71:8",
                  "trueBody": {
                    "id": 5414,
                    "nodeType": "Block",
                    "src": "2693:40:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5410,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5398,
                              "src": "2715:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2720:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 5412,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2714:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 5396,
                        "id": 5413,
                        "nodeType": "Return",
                        "src": "2707:15:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5416,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "2751:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2751:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5419,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5400,
                            "src": "2780:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          ],
                          "id": 5418,
                          "name": "truncate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5752,
                          "src": "2771:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct Exponential.Exp memory) pure returns (uint256)"
                          }
                        },
                        "id": 5420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2771:17:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5421,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2750:39:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 5396,
                  "id": 5422,
                  "nodeType": "Return",
                  "src": "2743:46:8"
                }
              ]
            },
            "documentation": "@dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.",
            "id": 5424,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulScalarTruncate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5388,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2511:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5387,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2511:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5390,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2525:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5389,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2525:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2510:30:8"
            },
            "returnParameters": {
              "id": 5396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5393,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2564:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5392,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "2564:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5395,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5424,
                  "src": "2575:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5394,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2575:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2563:20:8"
            },
            "scope": 5798,
            "src": "2484:312:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5463,
              "nodeType": "Block",
              "src": "3087:207:8",
              "statements": [
                {
                  "assignments": [
                    5438,
                    5440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5438,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5463,
                      "src": "3098:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5437,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "3098:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5440,
                      "name": "product",
                      "nodeType": "VariableDeclaration",
                      "scope": 5463,
                      "src": "3113:18:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5439,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "3113:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5445,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5442,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5426,
                        "src": "3145:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5443,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5428,
                        "src": "3148:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5441,
                      "name": "mulScalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "3135:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3135:20:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3097:58:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5446,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5438,
                      "src": "3169:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5447,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "3176:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3176:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "3169:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5455,
                  "nodeType": "IfStatement",
                  "src": "3165:71:8",
                  "trueBody": {
                    "id": 5454,
                    "nodeType": "Block",
                    "src": "3196:40:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5450,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5438,
                              "src": "3218:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5451,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3223:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 5452,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3217:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 5436,
                        "id": 5453,
                        "nodeType": "Return",
                        "src": "3210:15:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5458,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5440,
                            "src": "3270:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          ],
                          "id": 5457,
                          "name": "truncate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5752,
                          "src": "3261:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct Exponential.Exp memory) pure returns (uint256)"
                          }
                        },
                        "id": 5459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3261:17:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5460,
                        "name": "addend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5430,
                        "src": "3280:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5456,
                      "name": "addUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4568,
                      "src": "3253:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3253:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 5436,
                  "id": 5462,
                  "nodeType": "Return",
                  "src": "3246:41:8"
                }
              ]
            },
            "documentation": "@dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.",
            "id": 5464,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulScalarTruncateAddUInt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5426,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "2970:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5425,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "2970:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5428,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "2984:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5427,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2984:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5430,
                  "name": "addend",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3000:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3000:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2969:46:8"
            },
            "returnParameters": {
              "id": 5436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5433,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3063:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5432,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "3063:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5435,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3074:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3074:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3062:20:8"
            },
            "scope": 5798,
            "src": "2936:358:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5504,
              "nodeType": "Block",
              "src": "3471:261:8",
              "statements": [
                {
                  "assignments": [
                    5476,
                    5478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5476,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5504,
                      "src": "3482:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5475,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "3482:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5478,
                      "name": "descaledMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 5504,
                      "src": "3498:24:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5477,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3498:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5480,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5466,
                          "src": "3534:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5481,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "3534:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5482,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5468,
                        "src": "3546:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5479,
                      "name": "divUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "3526:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3526:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3481:72:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5485,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5476,
                      "src": "3567:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5486,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "3575:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5487,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3575:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "3567:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5496,
                  "nodeType": "IfStatement",
                  "src": "3563:90:8",
                  "trueBody": {
                    "id": 5495,
                    "nodeType": "Block",
                    "src": "3595:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5489,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "3617:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3638:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5490,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "3623:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "3623:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5493,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3616:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5474,
                        "id": 5494,
                        "nodeType": "Return",
                        "src": "3609:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5497,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "3671:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3671:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5500,
                            "name": "descaledMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5478,
                            "src": "3706:16:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5499,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "3691:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "3691:33:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5502,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3670:55:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5474,
                  "id": 5503,
                  "nodeType": "Return",
                  "src": "3663:62:8"
                }
              ]
            },
            "documentation": "@dev Divide an Exp by a scalar, returning a new Exp.",
            "id": 5505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divScalar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5466,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3395:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5465,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3395:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5468,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3409:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3409:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3394:30:8"
            },
            "returnParameters": {
              "id": 5474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5471,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3448:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5470,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "3448:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5473,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5505,
                  "src": "3459:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5472,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3459:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3447:23:8"
            },
            "scope": 5798,
            "src": "3376:356:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5543,
              "nodeType": "Block",
              "src": "3920:505:8",
              "statements": [
                {
                  "assignments": [
                    5517,
                    5519
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5517,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5543,
                      "src": "4205:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5516,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "4205:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5519,
                      "name": "numerator",
                      "nodeType": "VariableDeclaration",
                      "scope": 5543,
                      "src": "4221:17:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5518,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4221:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5524,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5521,
                        "name": "expScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5215,
                        "src": "4250:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5522,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5507,
                        "src": "4260:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5520,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "4242:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4242:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4204:63:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5525,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5517,
                      "src": "4281:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5526,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "4289:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4289:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "4281:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5536,
                  "nodeType": "IfStatement",
                  "src": "4277:90:8",
                  "trueBody": {
                    "id": 5535,
                    "nodeType": "Block",
                    "src": "4309:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5529,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5517,
                              "src": "4331:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5531,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4352:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5530,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "4337:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "4337:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5533,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4330:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5515,
                        "id": 5534,
                        "nodeType": "Return",
                        "src": "4323:33:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5538,
                        "name": "numerator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5519,
                        "src": "4390:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5539,
                          "name": "divisor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5509,
                          "src": "4401:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5540,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "4401:16:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5537,
                      "name": "getExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5287,
                      "src": "4383:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4383:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5515,
                  "id": 5542,
                  "nodeType": "Return",
                  "src": "4376:42:8"
                }
              ]
            },
            "documentation": "@dev Divide a scalar by an Exp, returning a new Exp.",
            "id": 5544,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divScalarByExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5507,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3838:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5506,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3838:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5509,
                  "name": "divisor",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3854:18:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5508,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3854:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3837:36:8"
            },
            "returnParameters": {
              "id": 5515,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5512,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3897:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5511,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "3897:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5514,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5544,
                  "src": "3908:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5513,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "3908:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3896:23:8"
            },
            "scope": 5798,
            "src": "3814:611:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5581,
              "nodeType": "Block",
              "src": "4642:225:8",
              "statements": [
                {
                  "assignments": [
                    5556,
                    5558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5556,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5581,
                      "src": "4653:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5555,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "4653:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5558,
                      "name": "fraction",
                      "nodeType": "VariableDeclaration",
                      "scope": 5581,
                      "src": "4668:19:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5557,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "4668:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5563,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5560,
                        "name": "scalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5546,
                        "src": "4706:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5561,
                        "name": "divisor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5548,
                        "src": "4714:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5559,
                      "name": "divScalarByExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5544,
                      "src": "4691:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4691:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4652:70:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5564,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5556,
                      "src": "4736:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5565,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "4743:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5566,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4743:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "4736:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5573,
                  "nodeType": "IfStatement",
                  "src": "4732:71:8",
                  "trueBody": {
                    "id": 5572,
                    "nodeType": "Block",
                    "src": "4763:40:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5568,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5556,
                              "src": "4785:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4790:1:8",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 5570,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4784:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 5554,
                        "id": 5571,
                        "nodeType": "Return",
                        "src": "4777:15:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5574,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "4821:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4821:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5577,
                            "name": "fraction",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5558,
                            "src": "4850:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp memory"
                            }
                          ],
                          "id": 5576,
                          "name": "truncate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5752,
                          "src": "4841:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct Exponential.Exp memory) pure returns (uint256)"
                          }
                        },
                        "id": 5578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4841:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5579,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "4820:40:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 5554,
                  "id": 5580,
                  "nodeType": "Return",
                  "src": "4813:47:8"
                }
              ]
            },
            "documentation": "@dev Divide a scalar by an Exp, then truncate to return an unsigned integer.",
            "id": 5582,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divScalarByExpTruncate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5546,
                  "name": "scalar",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4563:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5545,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4563:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5548,
                  "name": "divisor",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4579:18:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5547,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "4579:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4562:36:8"
            },
            "returnParameters": {
              "id": 5554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5551,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4622:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5550,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "4622:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5553,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5582,
                  "src": "4633:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5552,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4633:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4621:20:8"
            },
            "scope": 5798,
            "src": "4531:336:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5660,
              "nodeType": "Block",
              "src": "5049:1034:8",
              "statements": [
                {
                  "assignments": [
                    5594,
                    5596
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5594,
                      "name": "err0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5060:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5593,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "5060:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5596,
                      "name": "doubleScaledProduct",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5076:27:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5595,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5076:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5603,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5598,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5584,
                          "src": "5115:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5599,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "5115:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5600,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5586,
                          "src": "5127:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5601,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "5127:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5597,
                      "name": "mulUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "5107:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5107:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5059:79:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5604,
                      "name": "err0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5594,
                      "src": "5152:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5605,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "5160:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5160:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "5152:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5615,
                  "nodeType": "IfStatement",
                  "src": "5148:90:8",
                  "trueBody": {
                    "id": 5614,
                    "nodeType": "Block",
                    "src": "5180:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5608,
                              "name": "err0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "5202:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5610,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5223:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5609,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "5208:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "5208:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5612,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5201:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5592,
                        "id": 5613,
                        "nodeType": "Return",
                        "src": "5194:33:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5617,
                    5619
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5617,
                      "name": "err1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5550:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5616,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "5550:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5619,
                      "name": "doubleScaledProductWithHalfScale",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5566:40:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5618,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5566:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5624,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5621,
                        "name": "halfExpScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5220,
                        "src": "5618:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5622,
                        "name": "doubleScaledProduct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5596,
                        "src": "5632:19:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5620,
                      "name": "addUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4568,
                      "src": "5610:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5610:42:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5549:103:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5625,
                      "name": "err1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5617,
                      "src": "5666:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5626,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "5674:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5674:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "5666:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5636,
                  "nodeType": "IfStatement",
                  "src": "5662:90:8",
                  "trueBody": {
                    "id": 5635,
                    "nodeType": "Block",
                    "src": "5694:58:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5629,
                              "name": "err1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5617,
                              "src": "5716:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5631,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5737:1:8",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 5630,
                                "name": "Exp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5226,
                                "src": "5722:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                  "typeString": "type(struct Exponential.Exp storage pointer)"
                                }
                              },
                              "id": 5632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "mantissa"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "5722:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5633,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5715:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5592,
                        "id": 5634,
                        "nodeType": "Return",
                        "src": "5708:33:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5638,
                    5640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5638,
                      "name": "err2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5763:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5637,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "5763:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5640,
                      "name": "product",
                      "nodeType": "VariableDeclaration",
                      "scope": 5660,
                      "src": "5779:15:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5639,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5779:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5645,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5642,
                        "name": "doubleScaledProductWithHalfScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5619,
                        "src": "5806:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5643,
                        "name": "expScale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5215,
                        "src": "5840:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5641,
                      "name": "divUInt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "5798:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 5644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5798:51:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5762:87:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 5650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5647,
                          "name": "err2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5638,
                          "src": "5985:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5648,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "5993:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 5649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5993:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "5985:26:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5646,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11474,
                      "src": "5978:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5978:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5652,
                  "nodeType": "ExpressionStatement",
                  "src": "5978:34:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5653,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "6031:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 5654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6031:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5656,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5640,
                            "src": "6066:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5655,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "6051:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6051:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "id": 5658,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "6030:46:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5592,
                  "id": 5659,
                  "nodeType": "Return",
                  "src": "6023:53:8"
                }
              ]
            },
            "documentation": "@dev Multiplies two exponentials, returning a new exponential.",
            "id": 5661,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5584,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "4975:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5583,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "4975:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5586,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "4989:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5585,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "4989:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4974:28:8"
            },
            "returnParameters": {
              "id": 5592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5589,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "5026:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5588,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "5026:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5591,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5661,
                  "src": "5037:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5590,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "5037:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5025:23:8"
            },
            "scope": 5798,
            "src": "4959:1124:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5681,
              "nodeType": "Block",
              "src": "6281:70:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5674,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5663,
                            "src": "6320:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5673,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "6305:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6305:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5677,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5665,
                            "src": "6340:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5676,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "6325:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 5678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6325:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5672,
                      "name": "mulExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5661,
                        5682
                      ],
                      "referencedDeclaration": 5661,
                      "src": "6298:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6298:46:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5671,
                  "id": 5680,
                  "nodeType": "Return",
                  "src": "6291:53:8"
                }
              ]
            },
            "documentation": "@dev Multiplies two exponentials given their mantissas, returning a new exponential.",
            "id": 5682,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5663,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6213:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5662,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6213:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5665,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6224:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5664,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6224:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6212:22:8"
            },
            "returnParameters": {
              "id": 5671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6258:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5667,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "6258:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5670,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5682,
                  "src": "6269:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5669,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6269:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6257:23:8"
            },
            "scope": 5798,
            "src": "6197:154:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5719,
              "nodeType": "Block",
              "src": "6550:173:8",
              "statements": [
                {
                  "assignments": [
                    5696,
                    5698
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5696,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 5719,
                      "src": "6561:13:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5695,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "6561:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5698,
                      "name": "ab",
                      "nodeType": "VariableDeclaration",
                      "scope": 5719,
                      "src": "6576:13:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5697,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "6576:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5703,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5700,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5684,
                        "src": "6600:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5701,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5686,
                        "src": "6603:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5699,
                      "name": "mulExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5661,
                        5682
                      ],
                      "referencedDeclaration": 5661,
                      "src": "6593:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6593:12:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6560:45:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 5707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5704,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5696,
                      "src": "6619:3:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5705,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "6626:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 5706,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6626:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "6619:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5713,
                  "nodeType": "IfStatement",
                  "src": "6615:72:8",
                  "trueBody": {
                    "id": 5712,
                    "nodeType": "Block",
                    "src": "6646:41:8",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 5708,
                              "name": "err",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5696,
                              "src": "6668:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5709,
                              "name": "ab",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5698,
                              "src": "6673:2:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                                "typeString": "struct Exponential.Exp memory"
                              }
                            }
                          ],
                          "id": 5710,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6667:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                            "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                          }
                        },
                        "functionReturnParameters": 5694,
                        "id": 5711,
                        "nodeType": "Return",
                        "src": "6660:16:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5715,
                        "name": "ab",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5698,
                        "src": "6710:2:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5716,
                        "name": "c",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5688,
                        "src": "6714:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 5714,
                      "name": "mulExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5661,
                        5682
                      ],
                      "referencedDeclaration": 5661,
                      "src": "6703:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6703:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5694,
                  "id": 5718,
                  "nodeType": "Return",
                  "src": "6696:20:8"
                }
              ]
            },
            "documentation": "@dev Multiplies three exponentials, returning a new exponential.",
            "id": 5720,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulExp3",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5684,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6462:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5683,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6462:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5686,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6476:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5685,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6476:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5688,
                  "name": "c",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6490:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5687,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6490:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6461:42:8"
            },
            "returnParameters": {
              "id": 5694,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5691,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6527:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5690,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "6527:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5693,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5720,
                  "src": "6538:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5692,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6538:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6526:23:8"
            },
            "scope": 5798,
            "src": "6445:278:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5738,
              "nodeType": "Block",
              "src": "7045:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5732,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5722,
                          "src": "7069:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5733,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "7069:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5734,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5724,
                          "src": "7081:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        "id": 5735,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mantissa",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5225,
                        "src": "7081:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5731,
                      "name": "getExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5287,
                      "src": "7062:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 5736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7062:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "functionReturnParameters": 5730,
                  "id": 5737,
                  "nodeType": "Return",
                  "src": "7055:37:8"
                }
              ]
            },
            "documentation": "@dev Divides two exponentials, returning a new exponential.\n    (a/scale) / (b/scale) = (a/scale) * (scale/b) = a/b,\n which we can scale as an Exp by calling getExp(a.mantissa, b.mantissa)",
            "id": 5739,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5722,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "6971:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5721,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6971:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5724,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "6985:12:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5723,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "6985:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6970:28:8"
            },
            "returnParameters": {
              "id": 5730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5727,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "7022:9:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5726,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "7022:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5729,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5739,
                  "src": "7033:10:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5728,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7033:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7021:23:8"
            },
            "scope": 5798,
            "src": "6955:144:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5751,
              "nodeType": "Block",
              "src": "7317:147:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5746,
                        "name": "exp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5741,
                        "src": "7434:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5747,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7434:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5748,
                      "name": "expScale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5215,
                      "src": "7449:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7434:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5745,
                  "id": 5750,
                  "nodeType": "Return",
                  "src": "7427:30:8"
                }
              ]
            },
            "documentation": "@dev Truncates the given exp to a whole number value.\n     For example, truncate(Exp{mantissa: 15 * expScale}) = 15",
            "id": 5752,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "truncate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5741,
                  "name": "exp",
                  "nodeType": "VariableDeclaration",
                  "scope": 5752,
                  "src": "7269:14:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5740,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7269:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7268:16:8"
            },
            "returnParameters": {
              "id": 5745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5744,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5752,
                  "src": "7308:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5743,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7308:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7307:9:8"
            },
            "scope": 5798,
            "src": "7251:213:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5767,
              "nodeType": "Block",
              "src": "7628:111:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5761,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5754,
                        "src": "7645:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5762,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7645:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5763,
                        "name": "right",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "7661:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5764,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7661:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7645:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5760,
                  "id": 5766,
                  "nodeType": "Return",
                  "src": "7638:37:8"
                }
              ]
            },
            "documentation": "@dev Checks if first Exp is less than second Exp.",
            "id": 5768,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lessThanExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5754,
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 5768,
                  "src": "7564:15:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5753,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7564:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5756,
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 5768,
                  "src": "7581:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5755,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7581:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7563:35:8"
            },
            "returnParameters": {
              "id": 5760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5759,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5768,
                  "src": "7622:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5758,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7622:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7621:6:8"
            },
            "scope": 5798,
            "src": "7543:196:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5783,
              "nodeType": "Block",
              "src": "7898:55:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5777,
                        "name": "left",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5770,
                        "src": "7915:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5778,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7915:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5779,
                        "name": "right",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5772,
                        "src": "7932:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5780,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "7932:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7915:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5776,
                  "id": 5782,
                  "nodeType": "Return",
                  "src": "7908:38:8"
                }
              ]
            },
            "documentation": "@dev Checks if left Exp <= right Exp.",
            "id": 5784,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lessThanOrEqualExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5770,
                  "name": "left",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "7834:15:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5769,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7834:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5772,
                  "name": "right",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "7851:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5771,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "7851:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7833:35:8"
            },
            "returnParameters": {
              "id": 5776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5775,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5784,
                  "src": "7892:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5774,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7892:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7891:6:8"
            },
            "scope": 5798,
            "src": "7806:147:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5796,
              "nodeType": "Block",
              "src": "8089:43:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5791,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5786,
                        "src": "8106:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      "id": 5792,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mantissa",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5225,
                      "src": "8106:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8124:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8106:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5790,
                  "id": 5795,
                  "nodeType": "Return",
                  "src": "8099:26:8"
                }
              ]
            },
            "documentation": "@dev returns true if Exp is exactly zero",
            "id": 5797,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isZeroExp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5786,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "8042:16:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                    "typeString": "struct Exponential.Exp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5785,
                    "name": "Exp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5226,
                    "src": "8042:3:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                      "typeString": "struct Exponential.Exp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8041:18:8"
            },
            "returnParameters": {
              "id": 5790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5789,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "8083:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5788,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8083:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8082:6:8"
            },
            "scope": 5798,
            "src": "8023:109:8",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5799,
        "src": "378:7756:8"
      }
    ],
    "src": "0:8135:8"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.522Z",
  "devdoc": {
    "author": "Compound",
    "methods": {},
    "title": "Exponential module for storing fixed-decision decimals"
  },
  "userdoc": {
    "methods": {},
    "notice": "Exp is a struct which stores decimals with a fixed precision of 18 decimal places.        Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:        `Exp({mantissa: 5100000000000000000})`."
  }
}