{
  "contractName": "CallContract",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"Calls an arbitrary contract function.\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"hardlydifficult-ethereum-contracts/contracts/proxies/CallContract.sol\":\"CallContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"hardlydifficult-ethereum-contracts/contracts/proxies/CallContract.sol\":{\"keccak256\":\"0x5b891896d85a8937da32acd5af2d4b2d3fd8f5fbae639540d54ed972d05304b4\",\"urls\":[\"bzz-raw://982e6db3cc9a612ab3ecd4a404ed15255429e857ebf0bb96b404dedb83313dc1\",\"dweb:/ipfs/Qmeh7ezyMrD4q62edq1oLdR93NuTr8GYwE4XKE62T125Mt\"]}},\"version\":1}",
  "bytecode": "0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820831f5c1aa03ff782475668ef07890db8fce9edf99a6517a4fdfa70dcee52b82464736f6c63430005110032",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820831f5c1aa03ff782475668ef07890db8fce9edf99a6517a4fdfa70dcee52b82464736f6c63430005110032",
  "sourceMap": "81:1338:39:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "81:1338:39:-;;;;;;;;",
  "source": "pragma solidity ^0.5.0;\n\n/**\n * @title Calls an arbitrary contract function.\n */\nlibrary CallContract\n{\n  function _readUint(\n    address _contract,\n    bytes memory _callData\n  ) internal view\n    returns (uint)\n  {\n    (bool success, bytes memory result) = _contract.staticcall(_callData);\n    require(success, 'INTERNAL_CONTRACT_READ_CALL_FAILED');\n    return abi.decode(result, (uint));\n  }\n\n  function _call(\n    address _contract,\n    bytes memory _callData,\n    uint _ethValue\n  ) internal\n  {\n    bool result;\n    // solium-disable-next-line\n    assembly\n    {\n      result := call(\n        gas,\n        _contract,\n        _ethValue,\n        add(_callData, 32), // Start of callData information\n        mload(_callData), // Size of callData\n        0, // Output ignored\n        0 // Output ignored\n      )\n    }\n    require(result, 'INTERNAL_CONTRACT_CALL_FAILED');\n  }\n\n  function _callByPosition(\n    address _contract,\n    bytes memory _callDataConcat,\n    uint _startPosition,\n    uint _length,\n    uint _ethValue\n  ) internal\n  {\n    bool result;\n    // solium-disable-next-line\n    assembly\n    {\n      result := call(\n        gas,\n        _contract,\n        _ethValue,\n        add(_callDataConcat, add(32, _startPosition)), // Start of callData information\n        _length,\n        0, // Output ignored\n        0 // Output ignored\n      )\n    }\n    require(result, 'INTERNAL_CONTRACT_CALL_FAILED');\n  }\n}\n",
  "sourcePath": "hardlydifficult-ethereum-contracts/contracts/proxies/CallContract.sol",
  "ast": {
    "absolutePath": "hardlydifficult-ethereum-contracts/contracts/proxies/CallContract.sol",
    "exportedSymbols": {
      "CallContract": [
        8519
      ]
    },
    "id": 8520,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8445,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:39"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@title Calls an arbitrary contract function.",
        "fullyImplemented": true,
        "id": 8519,
        "linearizedBaseContracts": [
          8519
        ],
        "name": "CallContract",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8475,
              "nodeType": "Block",
              "src": "215:179:39",
              "statements": [
                {
                  "assignments": [
                    8455,
                    8457
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8455,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 8475,
                      "src": "222:12:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8454,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "222:4:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8457,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 8475,
                      "src": "236:19:39",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 8456,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "236:5:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8462,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8460,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8449,
                        "src": "280:9:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8458,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8447,
                        "src": "259:9:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 8459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "259:20:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 8461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "259:31:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "221:69:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8464,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8455,
                        "src": "304:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e5445524e414c5f434f4e54524143545f524541445f43414c4c5f4641494c4544",
                        "id": 8465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "313:36:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_460500885b09a276a8bbffd9560c9bd39ee301270d1a1601c753ade188d5d945",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_READ_CALL_FAILED\""
                        },
                        "value": "INTERNAL_CONTRACT_READ_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_460500885b09a276a8bbffd9560c9bd39ee301270d1a1601c753ade188d5d945",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_READ_CALL_FAILED\""
                        }
                      ],
                      "id": 8463,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "296:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "296:54:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8467,
                  "nodeType": "ExpressionStatement",
                  "src": "296:54:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8470,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8457,
                        "src": "374:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 8471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "383:4:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          }
                        ],
                        "id": 8472,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "382:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8468,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8521,
                        "src": "363:3:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 8469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "363:10:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 8473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "363:26:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8453,
                  "id": 8474,
                  "nodeType": "Return",
                  "src": "356:33:39"
                }
              ]
            },
            "documentation": null,
            "id": 8476,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_readUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8476,
                  "src": "130:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "130:7:39",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 8476,
                  "src": "153:22:39",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8448,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "153:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "124:55:39"
            },
            "returnParameters": {
              "id": 8453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8452,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8476,
                  "src": "207:4:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8451,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "207:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "206:6:39"
            },
            "scope": 8519,
            "src": "106:288:39",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8494,
              "nodeType": "Block",
              "src": "499:378:39",
              "statements": [
                {
                  "assignments": [
                    8486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8486,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 8494,
                      "src": "505:11:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8485,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "505:4:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8487,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "505:11:39"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 8486,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "575:6:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_callData": {
                        "declaration": 8480,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "717:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_callData": {
                        "declaration": 8480,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "654:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_contract": {
                        "declaration": 8478,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "612:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_ethValue": {
                        "declaration": 8482,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "631:9:39",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8488,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := call(gas(), _contract, _ethValue, add(_callData, 32), mload(_callData), 0, 0)\n}",
                  "src": "554:265:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8490,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8486,
                        "src": "832:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544",
                        "id": 8491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "840:31:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        },
                        "value": "INTERNAL_CONTRACT_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        }
                      ],
                      "id": 8489,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "824:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "824:48:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8493,
                  "nodeType": "ExpressionStatement",
                  "src": "824:48:39"
                }
              ]
            },
            "documentation": null,
            "id": 8495,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_call",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8478,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8495,
                  "src": "418:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8477,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "418:7:39",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8480,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 8495,
                  "src": "441:22:39",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8479,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "441:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8482,
                  "name": "_ethValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 8495,
                  "src": "469:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8481,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "469:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "412:75:39"
            },
            "returnParameters": {
              "id": 8484,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "499:0:39"
            },
            "scope": 8519,
            "src": "398:479:39",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8517,
              "nodeType": "Block",
              "src": "1041:376:39",
              "statements": [
                {
                  "assignments": [
                    8509
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8509,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 8517,
                      "src": "1047:11:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8508,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1047:4:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8510,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1047:11:39"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 8509,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1117:6:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_startPosition": {
                        "declaration": 8501,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1221:14:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_callDataConcat": {
                        "declaration": 8499,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1196:15:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_contract": {
                        "declaration": 8497,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1154:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_ethValue": {
                        "declaration": 8505,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1173:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 8503,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1280:7:39",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8511,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := call(gas(), _contract, _ethValue, add(_callDataConcat, add(32, _startPosition)), _length, 0, 0)\n}",
                  "src": "1096:263:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8513,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8509,
                        "src": "1372:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544",
                        "id": 8514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1380:31:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        },
                        "value": "INTERNAL_CONTRACT_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        }
                      ],
                      "id": 8512,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "1364:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1364:48:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8516,
                  "nodeType": "ExpressionStatement",
                  "src": "1364:48:39"
                }
              ]
            },
            "documentation": null,
            "id": 8518,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_callByPosition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8506,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8497,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "911:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8496,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "911:7:39",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8499,
                  "name": "_callDataConcat",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "934:28:39",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8498,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8501,
                  "name": "_startPosition",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "968:19:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8500,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "968:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8503,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "993:12:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8502,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "993:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8505,
                  "name": "_ethValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "1011:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8504,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1011:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "905:124:39"
            },
            "returnParameters": {
              "id": 8507,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1041:0:39"
            },
            "scope": 8519,
            "src": "881:536:39",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 8520,
        "src": "81:1338:39"
      }
    ],
    "src": "0:1420:39"
  },
  "legacyAST": {
    "absolutePath": "hardlydifficult-ethereum-contracts/contracts/proxies/CallContract.sol",
    "exportedSymbols": {
      "CallContract": [
        8519
      ]
    },
    "id": 8520,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8445,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:39"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@title Calls an arbitrary contract function.",
        "fullyImplemented": true,
        "id": 8519,
        "linearizedBaseContracts": [
          8519
        ],
        "name": "CallContract",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8475,
              "nodeType": "Block",
              "src": "215:179:39",
              "statements": [
                {
                  "assignments": [
                    8455,
                    8457
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8455,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 8475,
                      "src": "222:12:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8454,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "222:4:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 8457,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 8475,
                      "src": "236:19:39",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 8456,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "236:5:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8462,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8460,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8449,
                        "src": "280:9:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8458,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8447,
                        "src": "259:9:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 8459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "259:20:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 8461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "259:31:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "221:69:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8464,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8455,
                        "src": "304:7:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e5445524e414c5f434f4e54524143545f524541445f43414c4c5f4641494c4544",
                        "id": 8465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "313:36:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_460500885b09a276a8bbffd9560c9bd39ee301270d1a1601c753ade188d5d945",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_READ_CALL_FAILED\""
                        },
                        "value": "INTERNAL_CONTRACT_READ_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_460500885b09a276a8bbffd9560c9bd39ee301270d1a1601c753ade188d5d945",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_READ_CALL_FAILED\""
                        }
                      ],
                      "id": 8463,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "296:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "296:54:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8467,
                  "nodeType": "ExpressionStatement",
                  "src": "296:54:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8470,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8457,
                        "src": "374:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "id": 8471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "383:4:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          }
                        ],
                        "id": 8472,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "382:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8468,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8521,
                        "src": "363:3:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 8469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "363:10:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 8473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "363:26:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8453,
                  "id": 8474,
                  "nodeType": "Return",
                  "src": "356:33:39"
                }
              ]
            },
            "documentation": null,
            "id": 8476,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_readUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8476,
                  "src": "130:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "130:7:39",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 8476,
                  "src": "153:22:39",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8448,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "153:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "124:55:39"
            },
            "returnParameters": {
              "id": 8453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8452,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8476,
                  "src": "207:4:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8451,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "207:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "206:6:39"
            },
            "scope": 8519,
            "src": "106:288:39",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8494,
              "nodeType": "Block",
              "src": "499:378:39",
              "statements": [
                {
                  "assignments": [
                    8486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8486,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 8494,
                      "src": "505:11:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8485,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "505:4:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8487,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "505:11:39"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 8486,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "575:6:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_callData": {
                        "declaration": 8480,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "717:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_callData": {
                        "declaration": 8480,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "654:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_contract": {
                        "declaration": 8478,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "612:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_ethValue": {
                        "declaration": 8482,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "631:9:39",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8488,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := call(gas(), _contract, _ethValue, add(_callData, 32), mload(_callData), 0, 0)\n}",
                  "src": "554:265:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8490,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8486,
                        "src": "832:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544",
                        "id": 8491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "840:31:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        },
                        "value": "INTERNAL_CONTRACT_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        }
                      ],
                      "id": 8489,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "824:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "824:48:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8493,
                  "nodeType": "ExpressionStatement",
                  "src": "824:48:39"
                }
              ]
            },
            "documentation": null,
            "id": 8495,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_call",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8478,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8495,
                  "src": "418:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8477,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "418:7:39",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8480,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 8495,
                  "src": "441:22:39",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8479,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "441:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8482,
                  "name": "_ethValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 8495,
                  "src": "469:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8481,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "469:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "412:75:39"
            },
            "returnParameters": {
              "id": 8484,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "499:0:39"
            },
            "scope": 8519,
            "src": "398:479:39",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8517,
              "nodeType": "Block",
              "src": "1041:376:39",
              "statements": [
                {
                  "assignments": [
                    8509
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8509,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 8517,
                      "src": "1047:11:39",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8508,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1047:4:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8510,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1047:11:39"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 8509,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1117:6:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_startPosition": {
                        "declaration": 8501,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1221:14:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_callDataConcat": {
                        "declaration": 8499,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1196:15:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_contract": {
                        "declaration": 8497,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1154:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_ethValue": {
                        "declaration": 8505,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1173:9:39",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 8503,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1280:7:39",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8511,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := call(gas(), _contract, _ethValue, add(_callDataConcat, add(32, _startPosition)), _length, 0, 0)\n}",
                  "src": "1096:263:39"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8513,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8509,
                        "src": "1372:6:39",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544",
                        "id": 8514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1380:31:39",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        },
                        "value": "INTERNAL_CONTRACT_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ddf638174fc17ca90a5b28ed70027a57af4c383bef9c2359a73583c8bd399756",
                          "typeString": "literal_string \"INTERNAL_CONTRACT_CALL_FAILED\""
                        }
                      ],
                      "id": 8512,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "1364:7:39",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1364:48:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8516,
                  "nodeType": "ExpressionStatement",
                  "src": "1364:48:39"
                }
              ]
            },
            "documentation": null,
            "id": 8518,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_callByPosition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8506,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8497,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "911:17:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8496,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "911:7:39",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8499,
                  "name": "_callDataConcat",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "934:28:39",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8498,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:5:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8501,
                  "name": "_startPosition",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "968:19:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8500,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "968:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8503,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "993:12:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8502,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "993:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8505,
                  "name": "_ethValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 8518,
                  "src": "1011:14:39",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8504,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1011:4:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "905:124:39"
            },
            "returnParameters": {
              "id": 8507,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1041:0:39"
            },
            "scope": 8519,
            "src": "881:536:39",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 8520,
        "src": "81:1338:39"
      }
    ],
    "src": "0:1420:39"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.0",
  "updatedAt": "2020-12-11T05:03:09.373Z",
  "devdoc": {
    "methods": {},
    "title": "Calls an arbitrary contract function."
  },
  "userdoc": {
    "methods": {}
  }
}