{ "contractName": "SafeMath", "abi": [], "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for basic math operations with overflow/underflow protection\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol\":{\"keccak256\":\"0x1ab7391a19ca8a3ad2f3c4a1074e080d4d76dfdb834637bdd0c1e6b6acdf28af\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://d6d8c99621ca884b72da2d84eddfec8ec8c5533915691d6eec94a07adf445608\",\"dweb:/ipfs/QmaXr6DN7VbfxfMn3PsTy7SAMgZVVXbdeaw11BsAjVL2x1\"]}},\"version\":1}", "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203d1ce59e1c702fa5b7a4ebdbbe471db9a887eed169308b9570dd7668c3d42c7064736f6c634300060c0033", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203d1ce59e1c702fa5b7a4ebdbbe471db9a887eed169308b9570dd7668c3d42c7064736f6c634300060c0033", "immutableReferences": {}, "sourceMap": "167:1637:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;", "deployedSourceMap": "167:1637:60:-:0;;;;;;;;", "source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\n\r\n/**\r\n * @dev Library for basic math operations with overflow/underflow protection\r\n*/\r\nlibrary SafeMath {\r\n /**\r\n * @dev returns the sum of _x and _y, reverts if the calculation overflows\r\n *\r\n * @param _x value 1\r\n * @param _y value 2\r\n *\r\n * @return sum\r\n */\r\n function add(uint256 _x, uint256 _y) internal pure returns (uint256) {\r\n uint256 z = _x + _y;\r\n require(z >= _x, \"ERR_OVERFLOW\");\r\n return z;\r\n }\r\n\r\n /**\r\n * @dev returns the difference of _x minus _y, reverts if the calculation underflows\r\n *\r\n * @param _x minuend\r\n * @param _y subtrahend\r\n *\r\n * @return difference\r\n */\r\n function sub(uint256 _x, uint256 _y) internal pure returns (uint256) {\r\n require(_x >= _y, \"ERR_UNDERFLOW\");\r\n return _x - _y;\r\n }\r\n\r\n /**\r\n * @dev returns the product of multiplying _x by _y, reverts if the calculation overflows\r\n *\r\n * @param _x factor 1\r\n * @param _y factor 2\r\n *\r\n * @return product\r\n */\r\n function mul(uint256 _x, uint256 _y) internal pure returns (uint256) {\r\n // gas optimization\r\n if (_x == 0)\r\n return 0;\r\n\r\n uint256 z = _x * _y;\r\n require(z / _x == _y, \"ERR_OVERFLOW\");\r\n return z;\r\n }\r\n\r\n /**\r\n * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.\r\n *\r\n * @param _x dividend\r\n * @param _y divisor\r\n *\r\n * @return quotient\r\n */\r\n function div(uint256 _x, uint256 _y) internal pure returns (uint256) {\r\n require(_y > 0, \"ERR_DIVIDE_BY_ZERO\");\r\n uint256 c = _x / _y;\r\n return c;\r\n }\r\n}\r\n", "sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol", "ast": { "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol", "exportedSymbols": { "SafeMath": [ 22354 ] }, "id": 22355, "license": "SEE LICENSE IN LICENSE", "nodeType": "SourceUnit", "nodes": [ { "id": 22244, "literals": [ "solidity", "0.6", ".12" ], "nodeType": "PragmaDirective", "src": "52:23:60" }, { "abstract": false, "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": { "id": 22245, "nodeType": "StructuredDocumentation", "src": "79:86:60", "text": " @dev Library for basic math operations with overflow/underflow protection" }, "fullyImplemented": true, "id": 22354, "linearizedBaseContracts": [ 22354 ], "name": "SafeMath", "nodeType": "ContractDefinition", "nodes": [ { "body": { "id": 22270, "nodeType": "Block", "src": "455:100:60", "statements": [ { "assignments": [ 22256 ], "declarations": [ { "constant": false, "id": 22256, "mutability": "mutable", "name": "z", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22270, "src": "466:9:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22255, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "466:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 22260, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22259, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22257, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22248, "src": "478:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": { "argumentTypes": null, "id": 22258, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22250, "src": "483:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "478:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "466:19:60" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22264, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22262, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22256, "src": "504:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": { "argumentTypes": null, "id": 22263, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22248, "src": "509:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "504:7:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f4f564552464c4f57", "id": 22265, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "513:14:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" }, "value": "ERR_OVERFLOW" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" } ], "id": 22261, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "496:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22266, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "496:32:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22267, "nodeType": "ExpressionStatement", "src": "496:32:60" }, { "expression": { "argumentTypes": null, "id": 22268, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22256, "src": "546:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22254, "id": 22269, "nodeType": "Return", "src": "539:8:60" } ] }, "documentation": { "id": 22246, "nodeType": "StructuredDocumentation", "src": "191:189:60", "text": " @dev returns the sum of _x and _y, reverts if the calculation overflows\n @param _x value 1\n @param _y value 2\n @return sum" }, "id": 22271, "implemented": true, "kind": "function", "modifiers": [], "name": "add", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22251, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22248, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22271, "src": "399:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22247, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "399:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22250, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22271, "src": "411:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22249, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "411:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "398:24:60" }, "returnParameters": { "id": 22254, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22253, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22271, "src": "446:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22252, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "446:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "445:9:60" }, "scope": 22354, "src": "386:169:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22292, "nodeType": "Block", "src": "847:78:60", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22284, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22282, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22274, "src": "866:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": { "argumentTypes": null, "id": 22283, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22276, "src": "872:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "866:8:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f554e444552464c4f57", "id": 22285, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "876:15:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ddfa1b728b94871fcaf7b3731a21cfe44f7a2b4b84261190a1aa6f6b13e2a1f4", "typeString": "literal_string \"ERR_UNDERFLOW\"" }, "value": "ERR_UNDERFLOW" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_ddfa1b728b94871fcaf7b3731a21cfe44f7a2b4b84261190a1aa6f6b13e2a1f4", "typeString": "literal_string \"ERR_UNDERFLOW\"" } ], "id": 22281, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "858:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22286, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "858:34:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22287, "nodeType": "ExpressionStatement", "src": "858:34:60" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22290, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22288, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22274, "src": "910:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": { "argumentTypes": null, "id": 22289, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22276, "src": "915:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "910:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22280, "id": 22291, "nodeType": "Return", "src": "903:14:60" } ] }, "documentation": { "id": 22272, "nodeType": "StructuredDocumentation", "src": "563:209:60", "text": " @dev returns the difference of _x minus _y, reverts if the calculation underflows\n @param _x minuend\n @param _y subtrahend\n @return difference" }, "id": 22293, "implemented": true, "kind": "function", "modifiers": [], "name": "sub", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22277, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22274, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22293, "src": "791:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22273, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "791:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22276, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22293, "src": "803:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22275, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "803:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "790:24:60" }, "returnParameters": { "id": 22280, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22279, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22293, "src": "838:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22278, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "838:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "837:9:60" }, "scope": 22354, "src": "778:147:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22326, "nodeType": "Block", "src": "1218:181:60", "statements": [ { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22305, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22303, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22296, "src": "1262:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 22304, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1268:1:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "1262:7:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 22308, "nodeType": "IfStatement", "src": "1258:34:60", "trueBody": { "expression": { "argumentTypes": null, "hexValue": "30", "id": 22306, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1291:1:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "functionReturnParameters": 22302, "id": 22307, "nodeType": "Return", "src": "1284:8:60" } }, { "assignments": [ 22310 ], "declarations": [ { "constant": false, "id": 22310, "mutability": "mutable", "name": "z", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22326, "src": "1305:9:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22309, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1305:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 22314, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22313, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22311, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22296, "src": "1317:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": { "argumentTypes": null, "id": 22312, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22298, "src": "1322:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1317:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "1305:19:60" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22320, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22318, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22316, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22310, "src": "1343:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": { "argumentTypes": null, "id": 22317, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22296, "src": "1347:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1343:6:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "id": 22319, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22298, "src": "1353:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1343:12:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f4f564552464c4f57", "id": 22321, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1357:14:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" }, "value": "ERR_OVERFLOW" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" } ], "id": 22315, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1335:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22322, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1335:37:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22323, "nodeType": "ExpressionStatement", "src": "1335:37:60" }, { "expression": { "argumentTypes": null, "id": 22324, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22310, "src": "1390:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22302, "id": 22325, "nodeType": "Return", "src": "1383:8:60" } ] }, "documentation": { "id": 22294, "nodeType": "StructuredDocumentation", "src": "933:210:60", "text": " @dev returns the product of multiplying _x by _y, reverts if the calculation overflows\n @param _x factor 1\n @param _y factor 2\n @return product" }, "id": 22327, "implemented": true, "kind": "function", "modifiers": [], "name": "mul", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22299, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22296, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22327, "src": "1162:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22295, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1162:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22298, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22327, "src": "1174:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22297, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1174:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1161:24:60" }, "returnParameters": { "id": 22302, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22301, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22327, "src": "1209:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22300, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1209:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1208:9:60" }, "scope": 22354, "src": "1149:250:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22352, "nodeType": "Block", "src": "1696:105:60", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22340, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22338, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22332, "src": "1715:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 22339, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1720:1:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "1715:6:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f4449564944455f42595f5a45524f", "id": 22341, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1723:20:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_80c66eaebdd007de3c36bb5849ffa95e14b2130dc26a35fe1154627fc9dd838e", "typeString": "literal_string \"ERR_DIVIDE_BY_ZERO\"" }, "value": "ERR_DIVIDE_BY_ZERO" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_80c66eaebdd007de3c36bb5849ffa95e14b2130dc26a35fe1154627fc9dd838e", "typeString": "literal_string \"ERR_DIVIDE_BY_ZERO\"" } ], "id": 22337, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1707:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22342, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1707:37:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22343, "nodeType": "ExpressionStatement", "src": "1707:37:60" }, { "assignments": [ 22345 ], "declarations": [ { "constant": false, "id": 22345, "mutability": "mutable", "name": "c", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22352, "src": "1755:9:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22344, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1755:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 22349, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22348, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22346, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22330, "src": "1767:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": { "argumentTypes": null, "id": 22347, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22332, "src": "1772:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1767:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "1755:19:60" }, { "expression": { "argumentTypes": null, "id": 22350, "name": "c", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22345, "src": "1792:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22336, "id": 22351, "nodeType": "Return", "src": "1785:8:60" } ] }, "documentation": { "id": 22328, "nodeType": "StructuredDocumentation", "src": "1407:214:60", "text": " @dev Integer division of two numbers truncating the quotient, reverts on division by zero.\n @param _x dividend\n @param _y divisor\n @return quotient" }, "id": 22353, "implemented": true, "kind": "function", "modifiers": [], "name": "div", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22333, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22330, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22353, "src": "1640:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22329, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1640:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22332, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22353, "src": "1652:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22331, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1652:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1639:24:60" }, "returnParameters": { "id": 22336, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22335, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22353, "src": "1687:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22334, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1687:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1686:9:60" }, "scope": 22354, "src": "1627:174:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" } ], "scope": 22355, "src": "167:1637:60" } ], "src": "52:1754:60" }, "legacyAST": { "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol", "exportedSymbols": { "SafeMath": [ 22354 ] }, "id": 22355, "license": "SEE LICENSE IN LICENSE", "nodeType": "SourceUnit", "nodes": [ { "id": 22244, "literals": [ "solidity", "0.6", ".12" ], "nodeType": "PragmaDirective", "src": "52:23:60" }, { "abstract": false, "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": { "id": 22245, "nodeType": "StructuredDocumentation", "src": "79:86:60", "text": " @dev Library for basic math operations with overflow/underflow protection" }, "fullyImplemented": true, "id": 22354, "linearizedBaseContracts": [ 22354 ], "name": "SafeMath", "nodeType": "ContractDefinition", "nodes": [ { "body": { "id": 22270, "nodeType": "Block", "src": "455:100:60", "statements": [ { "assignments": [ 22256 ], "declarations": [ { "constant": false, "id": 22256, "mutability": "mutable", "name": "z", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22270, "src": "466:9:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22255, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "466:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 22260, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22259, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22257, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22248, "src": "478:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": { "argumentTypes": null, "id": 22258, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22250, "src": "483:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "478:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "466:19:60" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22264, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22262, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22256, "src": "504:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": { "argumentTypes": null, "id": 22263, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22248, "src": "509:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "504:7:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f4f564552464c4f57", "id": 22265, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "513:14:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" }, "value": "ERR_OVERFLOW" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" } ], "id": 22261, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "496:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22266, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "496:32:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22267, "nodeType": "ExpressionStatement", "src": "496:32:60" }, { "expression": { "argumentTypes": null, "id": 22268, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22256, "src": "546:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22254, "id": 22269, "nodeType": "Return", "src": "539:8:60" } ] }, "documentation": { "id": 22246, "nodeType": "StructuredDocumentation", "src": "191:189:60", "text": " @dev returns the sum of _x and _y, reverts if the calculation overflows\n @param _x value 1\n @param _y value 2\n @return sum" }, "id": 22271, "implemented": true, "kind": "function", "modifiers": [], "name": "add", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22251, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22248, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22271, "src": "399:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22247, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "399:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22250, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22271, "src": "411:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22249, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "411:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "398:24:60" }, "returnParameters": { "id": 22254, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22253, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22271, "src": "446:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22252, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "446:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "445:9:60" }, "scope": 22354, "src": "386:169:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22292, "nodeType": "Block", "src": "847:78:60", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22284, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22282, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22274, "src": "866:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": { "argumentTypes": null, "id": 22283, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22276, "src": "872:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "866:8:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f554e444552464c4f57", "id": 22285, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "876:15:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ddfa1b728b94871fcaf7b3731a21cfe44f7a2b4b84261190a1aa6f6b13e2a1f4", "typeString": "literal_string \"ERR_UNDERFLOW\"" }, "value": "ERR_UNDERFLOW" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_ddfa1b728b94871fcaf7b3731a21cfe44f7a2b4b84261190a1aa6f6b13e2a1f4", "typeString": "literal_string \"ERR_UNDERFLOW\"" } ], "id": 22281, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "858:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22286, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "858:34:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22287, "nodeType": "ExpressionStatement", "src": "858:34:60" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22290, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22288, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22274, "src": "910:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": { "argumentTypes": null, "id": 22289, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22276, "src": "915:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "910:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22280, "id": 22291, "nodeType": "Return", "src": "903:14:60" } ] }, "documentation": { "id": 22272, "nodeType": "StructuredDocumentation", "src": "563:209:60", "text": " @dev returns the difference of _x minus _y, reverts if the calculation underflows\n @param _x minuend\n @param _y subtrahend\n @return difference" }, "id": 22293, "implemented": true, "kind": "function", "modifiers": [], "name": "sub", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22277, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22274, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22293, "src": "791:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22273, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "791:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22276, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22293, "src": "803:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22275, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "803:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "790:24:60" }, "returnParameters": { "id": 22280, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22279, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22293, "src": "838:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22278, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "838:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "837:9:60" }, "scope": 22354, "src": "778:147:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22326, "nodeType": "Block", "src": "1218:181:60", "statements": [ { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22305, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22303, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22296, "src": "1262:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 22304, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1268:1:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "1262:7:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 22308, "nodeType": "IfStatement", "src": "1258:34:60", "trueBody": { "expression": { "argumentTypes": null, "hexValue": "30", "id": 22306, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1291:1:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "functionReturnParameters": 22302, "id": 22307, "nodeType": "Return", "src": "1284:8:60" } }, { "assignments": [ 22310 ], "declarations": [ { "constant": false, "id": 22310, "mutability": "mutable", "name": "z", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22326, "src": "1305:9:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22309, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1305:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 22314, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22313, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22311, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22296, "src": "1317:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": { "argumentTypes": null, "id": 22312, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22298, "src": "1322:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1317:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "1305:19:60" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22320, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22318, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22316, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22310, "src": "1343:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": { "argumentTypes": null, "id": 22317, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22296, "src": "1347:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1343:6:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "id": 22319, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22298, "src": "1353:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1343:12:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f4f564552464c4f57", "id": 22321, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1357:14:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" }, "value": "ERR_OVERFLOW" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_5857855e77a7ad10ccf8b5bcb17297771c10c957a1c88a434eb5a16fc4dad486", "typeString": "literal_string \"ERR_OVERFLOW\"" } ], "id": 22315, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1335:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22322, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1335:37:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22323, "nodeType": "ExpressionStatement", "src": "1335:37:60" }, { "expression": { "argumentTypes": null, "id": 22324, "name": "z", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22310, "src": "1390:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22302, "id": 22325, "nodeType": "Return", "src": "1383:8:60" } ] }, "documentation": { "id": 22294, "nodeType": "StructuredDocumentation", "src": "933:210:60", "text": " @dev returns the product of multiplying _x by _y, reverts if the calculation overflows\n @param _x factor 1\n @param _y factor 2\n @return product" }, "id": 22327, "implemented": true, "kind": "function", "modifiers": [], "name": "mul", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22299, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22296, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22327, "src": "1162:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22295, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1162:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22298, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22327, "src": "1174:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22297, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1174:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1161:24:60" }, "returnParameters": { "id": 22302, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22301, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22327, "src": "1209:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22300, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1209:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1208:9:60" }, "scope": 22354, "src": "1149:250:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "body": { "id": 22352, "nodeType": "Block", "src": "1696:105:60", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22340, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22338, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22332, "src": "1715:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 22339, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1720:1:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "1715:6:60", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552525f4449564944455f42595f5a45524f", "id": 22341, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1723:20:60", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_80c66eaebdd007de3c36bb5849ffa95e14b2130dc26a35fe1154627fc9dd838e", "typeString": "literal_string \"ERR_DIVIDE_BY_ZERO\"" }, "value": "ERR_DIVIDE_BY_ZERO" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_80c66eaebdd007de3c36bb5849ffa95e14b2130dc26a35fe1154627fc9dd838e", "typeString": "literal_string \"ERR_DIVIDE_BY_ZERO\"" } ], "id": 22337, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1707:7:60", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 22342, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1707:37:60", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 22343, "nodeType": "ExpressionStatement", "src": "1707:37:60" }, { "assignments": [ 22345 ], "declarations": [ { "constant": false, "id": 22345, "mutability": "mutable", "name": "c", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22352, "src": "1755:9:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22344, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1755:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 22349, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 22348, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 22346, "name": "_x", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22330, "src": "1767:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "/", "rightExpression": { "argumentTypes": null, "id": 22347, "name": "_y", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22332, "src": "1772:2:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "1767:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "1755:19:60" }, { "expression": { "argumentTypes": null, "id": 22350, "name": "c", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 22345, "src": "1792:1:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "functionReturnParameters": 22336, "id": 22351, "nodeType": "Return", "src": "1785:8:60" } ] }, "documentation": { "id": 22328, "nodeType": "StructuredDocumentation", "src": "1407:214:60", "text": " @dev Integer division of two numbers truncating the quotient, reverts on division by zero.\n @param _x dividend\n @param _y divisor\n @return quotient" }, "id": 22353, "implemented": true, "kind": "function", "modifiers": [], "name": "div", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 22333, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22330, "mutability": "mutable", "name": "_x", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22353, "src": "1640:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22329, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1640:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 22332, "mutability": "mutable", "name": "_y", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22353, "src": "1652:10:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22331, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1652:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1639:24:60" }, "returnParameters": { "id": 22336, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 22335, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 22353, "src": "1687:7:60", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 22334, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1687:7:60", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "1686:9:60" }, "scope": 22354, "src": "1627:174:60", "stateMutability": "pure", "virtual": false, "visibility": "internal" } ], "scope": 22355, "src": "167:1637:60" } ], "src": "52:1754:60" }, "compiler": { "name": "solc", "version": "0.6.12+commit.27d51765.Emscripten.clang" }, "networks": {}, "schemaVersion": "3.2.3", "updatedAt": "2020-10-20T08:24:47.844Z", "devdoc": { "details": "Library for basic math operations with overflow/underflow protection", "kind": "dev", "methods": {}, "version": 1 }, "userdoc": { "kind": "user", "methods": {}, "version": 1 } }