{
  "contractName": "CallContractMock",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_callData",
          "type": "bytes"
        }
      ],
      "name": "readUint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_callData",
          "type": "bytes"
        }
      ],
      "name": "call",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_callData",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_startPosition",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "callByPosition",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_startPosition\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"callByPosition\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"readUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{},\"title\":\"For testing only.\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/circleci/repo/contracts/test-artifacts/CallContractMock.sol\":\"CallContractMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":2000000},\"remappings\":[]},\"sources\":{\"/home/circleci/repo/contracts/proxies/CallContract.sol\":{\"keccak256\":\"0x5b891896d85a8937da32acd5af2d4b2d3fd8f5fbae639540d54ed972d05304b4\",\"urls\":[\"bzz-raw://982e6db3cc9a612ab3ecd4a404ed15255429e857ebf0bb96b404dedb83313dc1\",\"dweb:/ipfs/Qmeh7ezyMrD4q62edq1oLdR93NuTr8GYwE4XKE62T125Mt\"]},\"/home/circleci/repo/contracts/test-artifacts/CallContractMock.sol\":{\"keccak256\":\"0xfee5b48212210c3b506ac9a107448151dd1d10ce379a1404fa63fbcf47239040\",\"urls\":[\"bzz-raw://29b19ccb27bf2358e0976e2c2368b77eb27e6956959342d0d0069a1f83bd024c\",\"dweb:/ipfs/QmXEE2xYyFdd1oqz5MiBb6aqzVZDW7Tt5bWxY8iBM64qcg\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506105d5806100206000396000f3fe6080604052600436106100345760003560e01c80631b8b921d146100395780632acdbdd4146100fe57806347e719f6146101e0575b600080fd5b6100fc6004803603604081101561004f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561008757600080fd5b82018360208201111561009957600080fd5b803590602001918460018302840111640100000000831117156100bb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506102a8945050505050565b005b34801561010a57600080fd5b506101ce6004803603604081101561012157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561015957600080fd5b82018360208201111561016b57600080fd5b8035906020019184600183028401116401000000008311171561018d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506102d3945050505050565b60408051918252519081900360200190f35b6100fc600480360360808110156101f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610302565b6102cf73ffffffffffffffffffffffffffffffffffffffff8316823463ffffffff61033116565b5050565b60006102fb73ffffffffffffffffffffffffffffffffffffffff84168363ffffffff6103ae16565b9392505050565b61032b73ffffffffffffffffffffffffffffffffffffffff85168484843463ffffffff6104f816565b50505050565b600080600084516020860185885af190508061032b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544000000604482015290519081900360640190fd5b60008060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b6020831061041857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103db565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610478576040519150601f19603f3d011682016040523d82523d6000602084013e61047d565b606091505b5091509150816104d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061057f6022913960400191505060405180910390fd5b8080602001905160208110156104ed57600080fd5b505195945050505050565b600080600084866020018801858a5af190508061057657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544000000604482015290519081900360640190fd5b50505050505056fe494e5445524e414c5f434f4e54524143545f524541445f43414c4c5f4641494c4544a265627a7a723158202de134a82ce9c3bff0ab2741ccb1b86c788c803cc79775a8c65f2e455a8c138c64736f6c63430005110032",
  "deployedBytecode": "0x6080604052600436106100345760003560e01c80631b8b921d146100395780632acdbdd4146100fe57806347e719f6146101e0575b600080fd5b6100fc6004803603604081101561004f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561008757600080fd5b82018360208201111561009957600080fd5b803590602001918460018302840111640100000000831117156100bb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506102a8945050505050565b005b34801561010a57600080fd5b506101ce6004803603604081101561012157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561015957600080fd5b82018360208201111561016b57600080fd5b8035906020019184600183028401116401000000008311171561018d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506102d3945050505050565b60408051918252519081900360200190f35b6100fc600480360360808110156101f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610302565b6102cf73ffffffffffffffffffffffffffffffffffffffff8316823463ffffffff61033116565b5050565b60006102fb73ffffffffffffffffffffffffffffffffffffffff84168363ffffffff6103ae16565b9392505050565b61032b73ffffffffffffffffffffffffffffffffffffffff85168484843463ffffffff6104f816565b50505050565b600080600084516020860185885af190508061032b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544000000604482015290519081900360640190fd5b60008060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b6020831061041857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103db565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610478576040519150601f19603f3d011682016040523d82523d6000602084013e61047d565b606091505b5091509150816104d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061057f6022913960400191505060405180910390fd5b8080602001905160208110156104ed57600080fd5b505195945050505050565b600080600084866020018801858a5af190508061057657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e5445524e414c5f434f4e54524143545f43414c4c5f4641494c4544000000604482015290519081900360640190fd5b50505050505056fe494e5445524e414c5f434f4e54524143545f524541445f43414c4c5f4641494c4544a265627a7a723158202de134a82ce9c3bff0ab2741ccb1b86c788c803cc79775a8c65f2e455a8c138c64736f6c63430005110032",
  "sourceMap": "101:585:13:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;101:585:13;;;;;;;",
  "deployedSourceMap": "101:585:13:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;324:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;324:134:13;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;324:134:13;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;324:134:13;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;324:134:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;324:134:13;;-1:-1:-1;324:134:13;;-1:-1:-1;;;;;324:134:13:i;:::-;;166:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;166:154:13;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;166:154:13;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;166:154:13;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;166:154:13;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;166:154:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;166:154:13;;-1:-1:-1;166:154:13;;-1:-1:-1;;;;;166:154:13:i;:::-;;;;;;;;;;;;;;;;462:222;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;462:222:13;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;462:222:13;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;462:222:13;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;462:222:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;462:222:13;;-1:-1:-1;;462:222:13;;;-1:-1:-1;;;462:222:13;;;;:::i;324:134::-;416:37;:15;;;432:9;443;416:37;:15;:37;:::i;:::-;324:134;;:::o;166:154::-;264:4;285:30;:19;;;305:9;285:30;:19;:30;:::i;:::-;278:37;166:154;-1:-1:-1;;;166:154:13:o;462:222::-;607:72;:25;;;633:9;644:14;660:7;669:9;607:72;:25;:72;:::i;:::-;462:222;;;;:::o;398:479:7:-;505:11;786:1;757;717:9;711:16;665:2;654:9;650:18;631:9;612;599:3;585:228;575:238;;832:6;824:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;106:288;207:4;222:12;236:19;259:9;:20;;280:9;259:31;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;259:31:7;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;221:69:7;;;;304:7;296:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;374:6;363:26;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;363:26:7;;106:288;-1:-1:-1;;;;;106:288:7:o;881:536::-;1047:11;1326:1;1297;1280:7;1221:14;1217:2;1213:23;1196:15;1192:45;1173:9;1154;1141:3;1127:226;1117:236;;1372:6;1364:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;881:536;;;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport '../proxies/CallContract.sol';\n\n\n/**\n * @title For testing only.\n */\ncontract CallContractMock\n{\n  using CallContract for address;\n\n  function readUint(\n    address _contract,\n    bytes memory _callData\n  ) public view\n    returns (uint)\n  {\n    return _contract._readUint(_callData);\n  }\n\n  function call(\n    address _contract,\n    bytes memory _callData\n  ) public payable\n  {\n    _contract._call(_callData, msg.value);\n  }\n\n  function callByPosition(\n    address _contract,\n    bytes memory _callData,\n    uint _startPosition,\n    uint _length\n  ) public payable\n  {\n    _contract._callByPosition(_callData, _startPosition, _length, msg.value);\n  }\n}\n",
  "sourcePath": "/home/circleci/repo/contracts/test-artifacts/CallContractMock.sol",
  "ast": {
    "absolutePath": "/home/circleci/repo/contracts/test-artifacts/CallContractMock.sol",
    "exportedSymbols": {
      "CallContractMock": [
        1530
      ]
    },
    "id": 1531,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1472,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:13"
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/CallContract.sol",
        "file": "../proxies/CallContract.sol",
        "id": 1473,
        "nodeType": "ImportDirective",
        "scope": 1531,
        "sourceUnit": 1330,
        "src": "25:37:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title For testing only.",
        "fullyImplemented": true,
        "id": 1530,
        "linearizedBaseContracts": [
          1530
        ],
        "name": "CallContractMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1476,
            "libraryName": {
              "contractScope": null,
              "id": 1474,
              "name": "CallContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1329,
              "src": "137:12:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CallContract_$1329",
                "typeString": "library CallContract"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "131:31:13",
            "typeName": {
              "id": 1475,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "154:7:13",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "body": {
              "id": 1490,
              "nodeType": "Block",
              "src": "272:48:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1487,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1480,
                        "src": "305:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1485,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1478,
                        "src": "285:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_readUint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1286,
                      "src": "285:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory) view returns (uint256)"
                      }
                    },
                    "id": 1488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "285:30:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1484,
                  "id": 1489,
                  "nodeType": "Return",
                  "src": "278:37:13"
                }
              ]
            },
            "documentation": null,
            "id": 1491,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1481,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1478,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 1491,
                  "src": "189:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1477,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "189:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1480,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1491,
                  "src": "212:22:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1479,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "212:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "183:55:13"
            },
            "returnParameters": {
              "id": 1484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1483,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1491,
                  "src": "264:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1482,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "264:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "263:6:13"
            },
            "scope": 1530,
            "src": "166:154:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1506,
              "nodeType": "Block",
              "src": "410:48:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1501,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1495,
                        "src": "432:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1502,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2263,
                          "src": "443:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "443:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1498,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1493,
                        "src": "416:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_call",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1305,
                      "src": "416:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory,uint256)"
                      }
                    },
                    "id": 1504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "416:37:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1505,
                  "nodeType": "ExpressionStatement",
                  "src": "416:37:13"
                }
              ]
            },
            "documentation": null,
            "id": 1507,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "call",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1493,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 1507,
                  "src": "343:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1492,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "343:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1495,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1507,
                  "src": "366:22:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1494,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "366:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "337:55:13"
            },
            "returnParameters": {
              "id": 1497,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "410:0:13"
            },
            "scope": 1530,
            "src": "324:134:13",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1528,
              "nodeType": "Block",
              "src": "601:83:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1521,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1511,
                        "src": "633:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1522,
                        "name": "_startPosition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1513,
                        "src": "644:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1523,
                        "name": "_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1515,
                        "src": "660:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1524,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2263,
                          "src": "669:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "669:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1518,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1509,
                        "src": "607:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_callByPosition",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1328,
                      "src": "607:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory,uint256,uint256,uint256)"
                      }
                    },
                    "id": 1526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "607:72:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1527,
                  "nodeType": "ExpressionStatement",
                  "src": "607:72:13"
                }
              ]
            },
            "documentation": null,
            "id": 1529,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callByPosition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1509,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "491:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "491:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1511,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "514:22:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1510,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "514:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1513,
                  "name": "_startPosition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "542:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1512,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "542:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1515,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "567:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1514,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "567:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "485:98:13"
            },
            "returnParameters": {
              "id": 1517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "601:0:13"
            },
            "scope": 1530,
            "src": "462:222:13",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1531,
        "src": "101:585:13"
      }
    ],
    "src": "0:687:13"
  },
  "legacyAST": {
    "absolutePath": "/home/circleci/repo/contracts/test-artifacts/CallContractMock.sol",
    "exportedSymbols": {
      "CallContractMock": [
        1530
      ]
    },
    "id": 1531,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1472,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:13"
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/CallContract.sol",
        "file": "../proxies/CallContract.sol",
        "id": 1473,
        "nodeType": "ImportDirective",
        "scope": 1531,
        "sourceUnit": 1330,
        "src": "25:37:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title For testing only.",
        "fullyImplemented": true,
        "id": 1530,
        "linearizedBaseContracts": [
          1530
        ],
        "name": "CallContractMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1476,
            "libraryName": {
              "contractScope": null,
              "id": 1474,
              "name": "CallContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1329,
              "src": "137:12:13",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CallContract_$1329",
                "typeString": "library CallContract"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "131:31:13",
            "typeName": {
              "id": 1475,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "154:7:13",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "body": {
              "id": 1490,
              "nodeType": "Block",
              "src": "272:48:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1487,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1480,
                        "src": "305:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1485,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1478,
                        "src": "285:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_readUint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1286,
                      "src": "285:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory) view returns (uint256)"
                      }
                    },
                    "id": 1488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "285:30:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1484,
                  "id": 1489,
                  "nodeType": "Return",
                  "src": "278:37:13"
                }
              ]
            },
            "documentation": null,
            "id": 1491,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1481,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1478,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 1491,
                  "src": "189:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1477,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "189:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1480,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1491,
                  "src": "212:22:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1479,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "212:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "183:55:13"
            },
            "returnParameters": {
              "id": 1484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1483,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1491,
                  "src": "264:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1482,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "264:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "263:6:13"
            },
            "scope": 1530,
            "src": "166:154:13",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1506,
              "nodeType": "Block",
              "src": "410:48:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1501,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1495,
                        "src": "432:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1502,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2263,
                          "src": "443:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "443:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1498,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1493,
                        "src": "416:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_call",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1305,
                      "src": "416:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory,uint256)"
                      }
                    },
                    "id": 1504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "416:37:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1505,
                  "nodeType": "ExpressionStatement",
                  "src": "416:37:13"
                }
              ]
            },
            "documentation": null,
            "id": 1507,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "call",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1493,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 1507,
                  "src": "343:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1492,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "343:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1495,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1507,
                  "src": "366:22:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1494,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "366:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "337:55:13"
            },
            "returnParameters": {
              "id": 1497,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "410:0:13"
            },
            "scope": 1530,
            "src": "324:134:13",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1528,
              "nodeType": "Block",
              "src": "601:83:13",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1521,
                        "name": "_callData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1511,
                        "src": "633:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1522,
                        "name": "_startPosition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1513,
                        "src": "644:14:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1523,
                        "name": "_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1515,
                        "src": "660:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1524,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2263,
                          "src": "669:3:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "669:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1518,
                        "name": "_contract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1509,
                        "src": "607:9:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_callByPosition",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1328,
                      "src": "607:25:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory,uint256,uint256,uint256)"
                      }
                    },
                    "id": 1526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "607:72:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1527,
                  "nodeType": "ExpressionStatement",
                  "src": "607:72:13"
                }
              ]
            },
            "documentation": null,
            "id": 1529,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "callByPosition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1509,
                  "name": "_contract",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "491:17:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "491:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1511,
                  "name": "_callData",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "514:22:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1510,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "514:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1513,
                  "name": "_startPosition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "542:19:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1512,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "542:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1515,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 1529,
                  "src": "567:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1514,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "567:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "485:98:13"
            },
            "returnParameters": {
              "id": 1517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "601:0:13"
            },
            "scope": 1530,
            "src": "462:222:13",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1531,
        "src": "101:585:13"
      }
    ],
    "src": "0:687:13"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2020-04-07T20:17:34.950Z",
  "devdoc": {
    "methods": {},
    "title": "For testing only."
  },
  "userdoc": {
    "methods": {}
  }
}