Files
contract/deployment/alpha/out/FullMath.sol/FullMath.json
2023-11-16 17:36:43 -04:00

3186 lines
141 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"abi": [],
"bytecode": {
"object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122061e5625dde6275648ca66c4a676359480213dc202ebd2f425901d57b3f42e2b464736f6c63430008160033",
"sourceMap": "355:4893:37:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;355:4893:37;;;;;;;;;;;;;;;;;",
"linkReferences": {}
},
"deployedBytecode": {
"object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122061e5625dde6275648ca66c4a676359480213dc202ebd2f425901d57b3f42e2b464736f6c63430008160033",
"sourceMap": "355:4893:37:-:0;;;;;;;;",
"linkReferences": {}
},
"methodIdentifiers": {},
"rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Contains 512-bit math functions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib_uniswap/v3-core/contracts/libraries/FullMath.sol\":\"FullMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":999999999},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib_uniswap/v3-core/\",\":@uniswap/v3-periphery/=lib_uniswap/v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":v3-core/=lib_uniswap/v3-core/\",\":v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/\"]},\"sources\":{\"lib_uniswap/v3-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x77608bce1ddeb28ed9963b554b55e8a083277eda7be31e2c7255ef532cc408be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fcb307cf783b612ab9abd339296391d202974e7aa158deff23d9fb3aaac832d\",\"dweb:/ipfs/QmXhcwQajcGZADQtVoQpSWYNY4tB3Y42GPPyiaW62M5JH2\"]}},\"version\":1}",
"metadata": {
"compiler": {
"version": "0.8.22+commit.4fc1097e"
},
"language": "Solidity",
"output": {
"abi": [],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@uniswap/v3-core/=lib_uniswap/v3-core/",
"@uniswap/v3-periphery/=lib_uniswap/v3-periphery/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"v3-core/=lib_uniswap/v3-core/",
"v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/"
],
"optimizer": {
"runs": 999999999,
"details": {
"peephole": true,
"inliner": true,
"jumpdestRemover": true,
"orderLiterals": true,
"deduplicate": true,
"cse": true,
"constantOptimizer": true,
"yul": true,
"yulDetails": {
"stackAllocation": true,
"optimizerSteps": "dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu"
}
}
},
"metadata": {
"bytecodeHash": "ipfs"
},
"compilationTarget": {
"lib_uniswap/v3-core/contracts/libraries/FullMath.sol": "FullMath"
},
"libraries": {}
},
"sources": {
"lib_uniswap/v3-core/contracts/libraries/FullMath.sol": {
"keccak256": "0x77608bce1ddeb28ed9963b554b55e8a083277eda7be31e2c7255ef532cc408be",
"urls": [
"bzz-raw://8fcb307cf783b612ab9abd339296391d202974e7aa158deff23d9fb3aaac832d",
"dweb:/ipfs/QmXhcwQajcGZADQtVoQpSWYNY4tB3Y42GPPyiaW62M5JH2"
],
"license": "MIT"
}
},
"version": 1
},
"ast": {
"absolutePath": "lib_uniswap/v3-core/contracts/libraries/FullMath.sol",
"id": 44520,
"exportedSymbols": {
"FullMath": [
44519
]
},
"nodeType": "SourceUnit",
"src": "32:5217:37",
"nodes": [
{
"id": 44340,
"nodeType": "PragmaDirective",
"src": "32:24:37",
"nodes": [],
"literals": [
"solidity",
">=",
"0.4",
".0"
]
},
{
"id": 44519,
"nodeType": "ContractDefinition",
"src": "355:4893:37",
"nodes": [
{
"id": 44474,
"nodeType": "FunctionDefinition",
"src": "834:3804:37",
"nodes": [],
"body": {
"id": 44473,
"nodeType": "Block",
"src": "962:3676:37",
"nodes": [],
"statements": [
{
"id": 44472,
"nodeType": "UncheckedBlock",
"src": "963:3674:37",
"statements": [
{
"assignments": [
44354
],
"declarations": [
{
"constant": false,
"id": 44354,
"mutability": "mutable",
"name": "prod0",
"nameLocation": "1293:5:37",
"nodeType": "VariableDeclaration",
"scope": 44472,
"src": "1285:13:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44353,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1285:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 44355,
"nodeType": "VariableDeclarationStatement",
"src": "1285:13:37"
},
{
"assignments": [
44357
],
"declarations": [
{
"constant": false,
"id": 44357,
"mutability": "mutable",
"name": "prod1",
"nameLocation": "1361:5:37",
"nodeType": "VariableDeclaration",
"scope": 44472,
"src": "1353:13:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44356,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1353:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 44358,
"nodeType": "VariableDeclarationStatement",
"src": "1353:13:37"
},
{
"AST": {
"nativeSrc": "1429:141:37",
"nodeType": "YulBlock",
"src": "1429:141:37",
"statements": [
{
"nativeSrc": "1443:30:37",
"nodeType": "YulVariableDeclaration",
"src": "1443:30:37",
"value": {
"arguments": [
{
"name": "a",
"nativeSrc": "1460:1:37",
"nodeType": "YulIdentifier",
"src": "1460:1:37"
},
{
"name": "b",
"nativeSrc": "1463:1:37",
"nodeType": "YulIdentifier",
"src": "1463:1:37"
},
{
"arguments": [
{
"kind": "number",
"nativeSrc": "1470:1:37",
"nodeType": "YulLiteral",
"src": "1470:1:37",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nativeSrc": "1466:3:37",
"nodeType": "YulIdentifier",
"src": "1466:3:37"
},
"nativeSrc": "1466:6:37",
"nodeType": "YulFunctionCall",
"src": "1466:6:37"
}
],
"functionName": {
"name": "mulmod",
"nativeSrc": "1453:6:37",
"nodeType": "YulIdentifier",
"src": "1453:6:37"
},
"nativeSrc": "1453:20:37",
"nodeType": "YulFunctionCall",
"src": "1453:20:37"
},
"variables": [
{
"name": "mm",
"nativeSrc": "1447:2:37",
"nodeType": "YulTypedName",
"src": "1447:2:37",
"type": ""
}
]
},
{
"nativeSrc": "1486:18:37",
"nodeType": "YulAssignment",
"src": "1486:18:37",
"value": {
"arguments": [
{
"name": "a",
"nativeSrc": "1499:1:37",
"nodeType": "YulIdentifier",
"src": "1499:1:37"
},
{
"name": "b",
"nativeSrc": "1502:1:37",
"nodeType": "YulIdentifier",
"src": "1502:1:37"
}
],
"functionName": {
"name": "mul",
"nativeSrc": "1495:3:37",
"nodeType": "YulIdentifier",
"src": "1495:3:37"
},
"nativeSrc": "1495:9:37",
"nodeType": "YulFunctionCall",
"src": "1495:9:37"
},
"variableNames": [
{
"name": "prod0",
"nativeSrc": "1486:5:37",
"nodeType": "YulIdentifier",
"src": "1486:5:37"
}
]
},
{
"nativeSrc": "1517:43:37",
"nodeType": "YulAssignment",
"src": "1517:43:37",
"value": {
"arguments": [
{
"arguments": [
{
"name": "mm",
"nativeSrc": "1534:2:37",
"nodeType": "YulIdentifier",
"src": "1534:2:37"
},
{
"name": "prod0",
"nativeSrc": "1538:5:37",
"nodeType": "YulIdentifier",
"src": "1538:5:37"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "1530:3:37",
"nodeType": "YulIdentifier",
"src": "1530:3:37"
},
"nativeSrc": "1530:14:37",
"nodeType": "YulFunctionCall",
"src": "1530:14:37"
},
{
"arguments": [
{
"name": "mm",
"nativeSrc": "1549:2:37",
"nodeType": "YulIdentifier",
"src": "1549:2:37"
},
{
"name": "prod0",
"nativeSrc": "1553:5:37",
"nodeType": "YulIdentifier",
"src": "1553:5:37"
}
],
"functionName": {
"name": "lt",
"nativeSrc": "1546:2:37",
"nodeType": "YulIdentifier",
"src": "1546:2:37"
},
"nativeSrc": "1546:13:37",
"nodeType": "YulFunctionCall",
"src": "1546:13:37"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "1526:3:37",
"nodeType": "YulIdentifier",
"src": "1526:3:37"
},
"nativeSrc": "1526:34:37",
"nodeType": "YulFunctionCall",
"src": "1526:34:37"
},
"variableNames": [
{
"name": "prod1",
"nativeSrc": "1517:5:37",
"nodeType": "YulIdentifier",
"src": "1517:5:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44344,
"isOffset": false,
"isSlot": false,
"src": "1460:1:37",
"valueSize": 1
},
{
"declaration": 44344,
"isOffset": false,
"isSlot": false,
"src": "1499:1:37",
"valueSize": 1
},
{
"declaration": 44346,
"isOffset": false,
"isSlot": false,
"src": "1463:1:37",
"valueSize": 1
},
{
"declaration": 44346,
"isOffset": false,
"isSlot": false,
"src": "1502:1:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "1486:5:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "1538:5:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "1553:5:37",
"valueSize": 1
},
{
"declaration": 44357,
"isOffset": false,
"isSlot": false,
"src": "1517:5:37",
"valueSize": 1
}
],
"id": 44359,
"nodeType": "InlineAssembly",
"src": "1420:150:37"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44362,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44360,
"name": "prod1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44357,
"src": "1642:5:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 44361,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1651:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1642:10:37",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 44373,
"nodeType": "IfStatement",
"src": "1638:179:37",
"trueBody": {
"id": 44372,
"nodeType": "Block",
"src": "1654:163:37",
"statements": [
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44366,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44364,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "1676:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 44365,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1690:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1676:15:37",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 44363,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "1668:7:37",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 44367,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1668:24:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 44368,
"nodeType": "ExpressionStatement",
"src": "1668:24:37"
},
{
"AST": {
"nativeSrc": "1715:65:37",
"nodeType": "YulBlock",
"src": "1715:65:37",
"statements": [
{
"nativeSrc": "1733:33:37",
"nodeType": "YulAssignment",
"src": "1733:33:37",
"value": {
"arguments": [
{
"name": "prod0",
"nativeSrc": "1747:5:37",
"nodeType": "YulIdentifier",
"src": "1747:5:37"
},
{
"name": "denominator",
"nativeSrc": "1754:11:37",
"nodeType": "YulIdentifier",
"src": "1754:11:37"
}
],
"functionName": {
"name": "div",
"nativeSrc": "1743:3:37",
"nodeType": "YulIdentifier",
"src": "1743:3:37"
},
"nativeSrc": "1743:23:37",
"nodeType": "YulFunctionCall",
"src": "1743:23:37"
},
"variableNames": [
{
"name": "result",
"nativeSrc": "1733:6:37",
"nodeType": "YulIdentifier",
"src": "1733:6:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44348,
"isOffset": false,
"isSlot": false,
"src": "1754:11:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "1747:5:37",
"valueSize": 1
},
{
"declaration": 44351,
"isOffset": false,
"isSlot": false,
"src": "1733:6:37",
"valueSize": 1
}
],
"id": 44369,
"nodeType": "InlineAssembly",
"src": "1706:74:37"
},
{
"expression": {
"id": 44370,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44351,
"src": "1800:6:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 44352,
"id": 44371,
"nodeType": "Return",
"src": "1793:13:37"
}
]
}
},
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44377,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44375,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "1930:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"id": 44376,
"name": "prod1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44357,
"src": "1944:5:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "1930:19:37",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 44374,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "1922:7:37",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 44378,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1922:28:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 44379,
"nodeType": "ExpressionStatement",
"src": "1922:28:37"
},
{
"assignments": [
44381
],
"declarations": [
{
"constant": false,
"id": 44381,
"mutability": "mutable",
"name": "remainder",
"nameLocation": "2235:9:37",
"nodeType": "VariableDeclaration",
"scope": 44472,
"src": "2227:17:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44380,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2227:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 44382,
"nodeType": "VariableDeclarationStatement",
"src": "2227:17:37"
},
{
"AST": {
"nativeSrc": "2263:62:37",
"nodeType": "YulBlock",
"src": "2263:62:37",
"statements": [
{
"nativeSrc": "2277:38:37",
"nodeType": "YulAssignment",
"src": "2277:38:37",
"value": {
"arguments": [
{
"name": "a",
"nativeSrc": "2297:1:37",
"nodeType": "YulIdentifier",
"src": "2297:1:37"
},
{
"name": "b",
"nativeSrc": "2300:1:37",
"nodeType": "YulIdentifier",
"src": "2300:1:37"
},
{
"name": "denominator",
"nativeSrc": "2303:11:37",
"nodeType": "YulIdentifier",
"src": "2303:11:37"
}
],
"functionName": {
"name": "mulmod",
"nativeSrc": "2290:6:37",
"nodeType": "YulIdentifier",
"src": "2290:6:37"
},
"nativeSrc": "2290:25:37",
"nodeType": "YulFunctionCall",
"src": "2290:25:37"
},
"variableNames": [
{
"name": "remainder",
"nativeSrc": "2277:9:37",
"nodeType": "YulIdentifier",
"src": "2277:9:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44344,
"isOffset": false,
"isSlot": false,
"src": "2297:1:37",
"valueSize": 1
},
{
"declaration": 44346,
"isOffset": false,
"isSlot": false,
"src": "2300:1:37",
"valueSize": 1
},
{
"declaration": 44348,
"isOffset": false,
"isSlot": false,
"src": "2303:11:37",
"valueSize": 1
},
{
"declaration": 44381,
"isOffset": false,
"isSlot": false,
"src": "2277:9:37",
"valueSize": 1
}
],
"id": 44383,
"nodeType": "InlineAssembly",
"src": "2254:71:37"
},
{
"AST": {
"nativeSrc": "2398:108:37",
"nodeType": "YulBlock",
"src": "2398:108:37",
"statements": [
{
"nativeSrc": "2412:41:37",
"nodeType": "YulAssignment",
"src": "2412:41:37",
"value": {
"arguments": [
{
"name": "prod1",
"nativeSrc": "2425:5:37",
"nodeType": "YulIdentifier",
"src": "2425:5:37"
},
{
"arguments": [
{
"name": "remainder",
"nativeSrc": "2435:9:37",
"nodeType": "YulIdentifier",
"src": "2435:9:37"
},
{
"name": "prod0",
"nativeSrc": "2446:5:37",
"nodeType": "YulIdentifier",
"src": "2446:5:37"
}
],
"functionName": {
"name": "gt",
"nativeSrc": "2432:2:37",
"nodeType": "YulIdentifier",
"src": "2432:2:37"
},
"nativeSrc": "2432:20:37",
"nodeType": "YulFunctionCall",
"src": "2432:20:37"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "2421:3:37",
"nodeType": "YulIdentifier",
"src": "2421:3:37"
},
"nativeSrc": "2421:32:37",
"nodeType": "YulFunctionCall",
"src": "2421:32:37"
},
"variableNames": [
{
"name": "prod1",
"nativeSrc": "2412:5:37",
"nodeType": "YulIdentifier",
"src": "2412:5:37"
}
]
},
{
"nativeSrc": "2466:30:37",
"nodeType": "YulAssignment",
"src": "2466:30:37",
"value": {
"arguments": [
{
"name": "prod0",
"nativeSrc": "2479:5:37",
"nodeType": "YulIdentifier",
"src": "2479:5:37"
},
{
"name": "remainder",
"nativeSrc": "2486:9:37",
"nodeType": "YulIdentifier",
"src": "2486:9:37"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "2475:3:37",
"nodeType": "YulIdentifier",
"src": "2475:3:37"
},
"nativeSrc": "2475:21:37",
"nodeType": "YulFunctionCall",
"src": "2475:21:37"
},
"variableNames": [
{
"name": "prod0",
"nativeSrc": "2466:5:37",
"nodeType": "YulIdentifier",
"src": "2466:5:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "2446:5:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "2466:5:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "2479:5:37",
"valueSize": 1
},
{
"declaration": 44357,
"isOffset": false,
"isSlot": false,
"src": "2412:5:37",
"valueSize": 1
},
{
"declaration": 44357,
"isOffset": false,
"isSlot": false,
"src": "2425:5:37",
"valueSize": 1
},
{
"declaration": 44381,
"isOffset": false,
"isSlot": false,
"src": "2435:9:37",
"valueSize": 1
},
{
"declaration": 44381,
"isOffset": false,
"isSlot": false,
"src": "2486:9:37",
"valueSize": 1
}
],
"id": 44384,
"nodeType": "InlineAssembly",
"src": "2389:117:37"
},
{
"assignments": [
44386
],
"declarations": [
{
"constant": false,
"id": 44386,
"mutability": "mutable",
"name": "twos",
"nameLocation": "2663:4:37",
"nodeType": "VariableDeclaration",
"scope": 44472,
"src": "2655:12:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44385,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2655:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 44397,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44396,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"arguments": [
{
"id": 44393,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "-",
"prefix": true,
"src": "2678:20:37",
"subExpression": {
"arguments": [
{
"id": 44391,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "2686:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 44390,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2679:6:37",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_int256_$",
"typeString": "type(int256)"
},
"typeName": {
"id": 44389,
"name": "int256",
"nodeType": "ElementaryTypeName",
"src": "2679:6:37",
"typeDescriptions": {}
}
},
"id": 44392,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2679:19:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 44388,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2670:7:37",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 44387,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2670:7:37",
"typeDescriptions": {}
}
},
"id": 44394,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2670:29:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "&",
"rightExpression": {
"id": 44395,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "2702:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2670:43:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2655:58:37"
},
{
"AST": {
"nativeSrc": "2778:61:37",
"nodeType": "YulBlock",
"src": "2778:61:37",
"statements": [
{
"nativeSrc": "2792:37:37",
"nodeType": "YulAssignment",
"src": "2792:37:37",
"value": {
"arguments": [
{
"name": "denominator",
"nativeSrc": "2811:11:37",
"nodeType": "YulIdentifier",
"src": "2811:11:37"
},
{
"name": "twos",
"nativeSrc": "2824:4:37",
"nodeType": "YulIdentifier",
"src": "2824:4:37"
}
],
"functionName": {
"name": "div",
"nativeSrc": "2807:3:37",
"nodeType": "YulIdentifier",
"src": "2807:3:37"
},
"nativeSrc": "2807:22:37",
"nodeType": "YulFunctionCall",
"src": "2807:22:37"
},
"variableNames": [
{
"name": "denominator",
"nativeSrc": "2792:11:37",
"nodeType": "YulIdentifier",
"src": "2792:11:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44348,
"isOffset": false,
"isSlot": false,
"src": "2792:11:37",
"valueSize": 1
},
{
"declaration": 44348,
"isOffset": false,
"isSlot": false,
"src": "2811:11:37",
"valueSize": 1
},
{
"declaration": 44386,
"isOffset": false,
"isSlot": false,
"src": "2824:4:37",
"valueSize": 1
}
],
"id": 44398,
"nodeType": "InlineAssembly",
"src": "2769:70:37"
},
{
"AST": {
"nativeSrc": "2912:49:37",
"nodeType": "YulBlock",
"src": "2912:49:37",
"statements": [
{
"nativeSrc": "2926:25:37",
"nodeType": "YulAssignment",
"src": "2926:25:37",
"value": {
"arguments": [
{
"name": "prod0",
"nativeSrc": "2939:5:37",
"nodeType": "YulIdentifier",
"src": "2939:5:37"
},
{
"name": "twos",
"nativeSrc": "2946:4:37",
"nodeType": "YulIdentifier",
"src": "2946:4:37"
}
],
"functionName": {
"name": "div",
"nativeSrc": "2935:3:37",
"nodeType": "YulIdentifier",
"src": "2935:3:37"
},
"nativeSrc": "2935:16:37",
"nodeType": "YulFunctionCall",
"src": "2935:16:37"
},
"variableNames": [
{
"name": "prod0",
"nativeSrc": "2926:5:37",
"nodeType": "YulIdentifier",
"src": "2926:5:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "2926:5:37",
"valueSize": 1
},
{
"declaration": 44354,
"isOffset": false,
"isSlot": false,
"src": "2939:5:37",
"valueSize": 1
},
{
"declaration": 44386,
"isOffset": false,
"isSlot": false,
"src": "2946:4:37",
"valueSize": 1
}
],
"id": 44399,
"nodeType": "InlineAssembly",
"src": "2903:58:37"
},
{
"AST": {
"nativeSrc": "3149:63:37",
"nodeType": "YulBlock",
"src": "3149:63:37",
"statements": [
{
"nativeSrc": "3163:39:37",
"nodeType": "YulAssignment",
"src": "3163:39:37",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nativeSrc": "3183:1:37",
"nodeType": "YulLiteral",
"src": "3183:1:37",
"type": "",
"value": "0"
},
{
"name": "twos",
"nativeSrc": "3186:4:37",
"nodeType": "YulIdentifier",
"src": "3186:4:37"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "3179:3:37",
"nodeType": "YulIdentifier",
"src": "3179:3:37"
},
"nativeSrc": "3179:12:37",
"nodeType": "YulFunctionCall",
"src": "3179:12:37"
},
{
"name": "twos",
"nativeSrc": "3193:4:37",
"nodeType": "YulIdentifier",
"src": "3193:4:37"
}
],
"functionName": {
"name": "div",
"nativeSrc": "3175:3:37",
"nodeType": "YulIdentifier",
"src": "3175:3:37"
},
"nativeSrc": "3175:23:37",
"nodeType": "YulFunctionCall",
"src": "3175:23:37"
},
{
"kind": "number",
"nativeSrc": "3200:1:37",
"nodeType": "YulLiteral",
"src": "3200:1:37",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "3171:3:37",
"nodeType": "YulIdentifier",
"src": "3171:3:37"
},
"nativeSrc": "3171:31:37",
"nodeType": "YulFunctionCall",
"src": "3171:31:37"
},
"variableNames": [
{
"name": "twos",
"nativeSrc": "3163:4:37",
"nodeType": "YulIdentifier",
"src": "3163:4:37"
}
]
}
]
},
"evmVersion": "paris",
"externalReferences": [
{
"declaration": 44386,
"isOffset": false,
"isSlot": false,
"src": "3163:4:37",
"valueSize": 1
},
{
"declaration": 44386,
"isOffset": false,
"isSlot": false,
"src": "3186:4:37",
"valueSize": 1
},
{
"declaration": 44386,
"isOffset": false,
"isSlot": false,
"src": "3193:4:37",
"valueSize": 1
}
],
"id": 44400,
"nodeType": "InlineAssembly",
"src": "3140:72:37"
},
{
"expression": {
"id": 44405,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44401,
"name": "prod0",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44354,
"src": "3221:5:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "|=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44404,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44402,
"name": "prod1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44357,
"src": "3230:5:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44403,
"name": "twos",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44386,
"src": "3238:4:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3230:12:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3221:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44406,
"nodeType": "ExpressionStatement",
"src": "3221:21:37"
},
{
"assignments": [
44408
],
"declarations": [
{
"constant": false,
"id": 44408,
"mutability": "mutable",
"name": "inv",
"nameLocation": "3584:3:37",
"nodeType": "VariableDeclaration",
"scope": 44472,
"src": "3576:11:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44407,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3576:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 44415,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44414,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44411,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "33",
"id": 44409,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3591:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_3_by_1",
"typeString": "int_const 3"
},
"value": "3"
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44410,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "3595:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3591:15:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 44412,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "3590:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "^",
"rightExpression": {
"hexValue": "32",
"id": 44413,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3610:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "3590:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3576:35:37"
},
{
"expression": {
"id": 44422,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44416,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "3826:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44421,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 44417,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3833:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44420,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44418,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "3837:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44419,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "3851:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3837:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3833:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3826:28:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44423,
"nodeType": "ExpressionStatement",
"src": "3826:28:37"
},
{
"expression": {
"id": 44430,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44424,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "3884:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44429,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 44425,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3891:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44428,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44426,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "3895:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44427,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "3909:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3895:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3891:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3884:28:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44431,
"nodeType": "ExpressionStatement",
"src": "3884:28:37"
},
{
"expression": {
"id": 44438,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44432,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "3943:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44437,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 44433,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3950:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44436,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44434,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "3954:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44435,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "3968:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3954:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3950:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3943:28:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44439,
"nodeType": "ExpressionStatement",
"src": "3943:28:37"
},
{
"expression": {
"id": 44446,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44440,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4002:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44445,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 44441,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4009:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44444,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44442,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "4013:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44443,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4027:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4013:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4009:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4002:28:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44447,
"nodeType": "ExpressionStatement",
"src": "4002:28:37"
},
{
"expression": {
"id": 44454,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44448,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4061:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44453,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 44449,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4068:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44452,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44450,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "4072:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44451,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4086:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4072:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4068:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4061:28:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44455,
"nodeType": "ExpressionStatement",
"src": "4061:28:37"
},
{
"expression": {
"id": 44462,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44456,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4121:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44461,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 44457,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4128:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44460,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44458,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44348,
"src": "4132:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44459,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4146:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4132:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4128:21:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4121:28:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44463,
"nodeType": "ExpressionStatement",
"src": "4121:28:37"
},
{
"expression": {
"id": 44468,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44464,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44351,
"src": "4587:6:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44467,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44465,
"name": "prod0",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44354,
"src": "4596:5:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 44466,
"name": "inv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44408,
"src": "4604:3:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4596:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4587:20:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44469,
"nodeType": "ExpressionStatement",
"src": "4587:20:37"
},
{
"expression": {
"id": 44470,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44351,
"src": "4624:6:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 44352,
"id": 44471,
"nodeType": "Return",
"src": "4617:13:37"
}
]
}
]
},
"documentation": {
"id": 44342,
"nodeType": "StructuredDocumentation",
"src": "378:359:37",
"text": "@notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result\n @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv"
},
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "mulDiv",
"nameLocation": "843:6:37",
"parameters": {
"id": 44349,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 44344,
"mutability": "mutable",
"name": "a",
"nameLocation": "867:1:37",
"nodeType": "VariableDeclaration",
"scope": 44474,
"src": "859:9:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44343,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "859:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 44346,
"mutability": "mutable",
"name": "b",
"nameLocation": "886:1:37",
"nodeType": "VariableDeclaration",
"scope": 44474,
"src": "878:9:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44345,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "878:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 44348,
"mutability": "mutable",
"name": "denominator",
"nameLocation": "905:11:37",
"nodeType": "VariableDeclaration",
"scope": 44474,
"src": "897:19:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44347,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "897:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "849:73:37"
},
"returnParameters": {
"id": 44352,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 44351,
"mutability": "mutable",
"name": "result",
"nameLocation": "954:6:37",
"nodeType": "VariableDeclaration",
"scope": 44474,
"src": "946:14:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44350,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "946:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "945:16:37"
},
"scope": 44519,
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"id": 44518,
"nodeType": "FunctionDefinition",
"src": "4920:326:37",
"nodes": [],
"body": {
"id": 44517,
"nodeType": "Block",
"src": "5058:188:37",
"nodes": [],
"statements": [
{
"id": 44516,
"nodeType": "UncheckedBlock",
"src": "5059:186:37",
"statements": [
{
"expression": {
"id": 44492,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 44486,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44484,
"src": "5078:6:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"id": 44488,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44477,
"src": "5094:1:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 44489,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44479,
"src": "5097:1:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 44490,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44481,
"src": "5100:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 44487,
"name": "mulDiv",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44474,
"src": "5087:6:37",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 44491,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5087:25:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5078:34:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44493,
"nodeType": "ExpressionStatement",
"src": "5078:34:37"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44500,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"arguments": [
{
"id": 44495,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44477,
"src": "5133:1:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 44496,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44479,
"src": "5136:1:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 44497,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44481,
"src": "5139:11:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 44494,
"name": "mulmod",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -16,
"src": "5126:6:37",
"typeDescriptions": {
"typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 44498,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5126:25:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 44499,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5154:1:37",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "5126:29:37",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 44515,
"nodeType": "IfStatement",
"src": "5122:117:37",
"trueBody": {
"id": 44514,
"nodeType": "Block",
"src": "5157:82:37",
"statements": [
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 44508,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 44502,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44484,
"src": "5179:6:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"expression": {
"arguments": [
{
"id": 44505,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "5193:7:37",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 44504,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5193:7:37",
"typeDescriptions": {}
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
}
],
"id": 44503,
"name": "type",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -27,
"src": "5188:4:37",
"typeDescriptions": {
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
"typeString": "function () pure"
}
},
"id": 44506,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5188:13:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_magic_meta_type_t_uint256",
"typeString": "type(uint256)"
}
},
"id": 44507,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "5202:3:37",
"memberName": "max",
"nodeType": "MemberAccess",
"src": "5188:17:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5179:26:37",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 44501,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "5171:7:37",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 44509,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5171:35:37",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 44510,
"nodeType": "ExpressionStatement",
"src": "5171:35:37"
},
{
"expression": {
"id": 44512,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "5220:8:37",
"subExpression": {
"id": 44511,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 44484,
"src": "5220:6:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 44513,
"nodeType": "ExpressionStatement",
"src": "5220:8:37"
}
]
}
}
]
}
]
},
"documentation": {
"id": 44475,
"nodeType": "StructuredDocumentation",
"src": "4644:271:37",
"text": "@notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result"
},
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "mulDivRoundingUp",
"nameLocation": "4929:16:37",
"parameters": {
"id": 44482,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 44477,
"mutability": "mutable",
"name": "a",
"nameLocation": "4963:1:37",
"nodeType": "VariableDeclaration",
"scope": 44518,
"src": "4955:9:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44476,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4955:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 44479,
"mutability": "mutable",
"name": "b",
"nameLocation": "4982:1:37",
"nodeType": "VariableDeclaration",
"scope": 44518,
"src": "4974:9:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44478,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4974:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 44481,
"mutability": "mutable",
"name": "denominator",
"nameLocation": "5001:11:37",
"nodeType": "VariableDeclaration",
"scope": 44518,
"src": "4993:19:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44480,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4993:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "4945:73:37"
},
"returnParameters": {
"id": 44485,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 44484,
"mutability": "mutable",
"name": "result",
"nameLocation": "5050:6:37",
"nodeType": "VariableDeclaration",
"scope": 44518,
"src": "5042:14:37",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44483,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5042:7:37",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "5041:16:37"
},
"scope": 44519,
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
}
],
"abstract": false,
"baseContracts": [],
"canonicalName": "FullMath",
"contractDependencies": [],
"contractKind": "library",
"documentation": {
"id": 44341,
"nodeType": "StructuredDocumentation",
"src": "58:297:37",
"text": "@title Contains 512-bit math functions\n @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\n @dev Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits"
},
"fullyImplemented": true,
"linearizedBaseContracts": [
44519
],
"name": "FullMath",
"nameLocation": "363:8:37",
"scope": 44520,
"usedErrors": [],
"usedEvents": []
}
],
"license": "MIT"
},
"id": 37
}