{
  "contractName": "CloneFactoryMock",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proxyAddress",
          "type": "address"
        }
      ],
      "name": "CloneCreated",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "createClone",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "createClone2",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "isAddressAvailable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "getClone2Address",
      "outputs": [
        {
          "internalType": "address",
          "name": "cloneAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"}],\"name\":\"CloneCreated\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"createClone\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"createClone2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getClone2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"cloneAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isAddressAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/circleci/repo/contracts/test-artifacts/CloneFactoryMock.sol\":\"CloneFactoryMock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":2000000},\"remappings\":[]},\"sources\":{\"/home/circleci/repo/contracts/proxies/Clone2Factory.sol\":{\"keccak256\":\"0x20ad3c3465defae97e35187a1f74bbdfcfa5ef493d79cca00e5692fed6feeec1\",\"urls\":[\"bzz-raw://6ffd068b3b4761476990d58d23ae546eec0103fb2e5f896c31303a08d4c39c92\",\"dweb:/ipfs/QmSNL1DVqb5WX4eW4DXkuTEMYsccwkVdXb14L2SKp7Utzf\"]},\"/home/circleci/repo/contracts/proxies/Clone2Probe.sol\":{\"keccak256\":\"0x8deae8274c8fe85a34c589216b3f4081a449da2190ee5601cd38a9c53af0afa1\",\"urls\":[\"bzz-raw://86372d82fbdc52a99737977d150962365ed19052742244269f1b0322b44a7c0b\",\"dweb:/ipfs/Qmc1vGbFSoc3ssuH1Ejef2YmBdNjcCdLRZJrNJQbQb9Yv2\"]},\"/home/circleci/repo/contracts/proxies/CloneFactory.sol\":{\"keccak256\":\"0xb23450ec646fe4c1417ed869683a2020f0f83b02263e452eeb17a9e86f713389\",\"urls\":[\"bzz-raw://30c056fd32bffd39f6e63604b08bccca45dadd2ef1597efeb328ac4094d6f342\",\"dweb:/ipfs/Qmey1PvM58jNRH4yyWUjnNci7H1TA6DzpKEtEgy5BEmydq\"]},\"/home/circleci/repo/contracts/proxies/Create2Probe.sol\":{\"keccak256\":\"0xe15113008fd3548e20228b0f1f33d51650a3e92e3c83423c4511525a926fc053\",\"urls\":[\"bzz-raw://0a49c2e5cd0aa4fdc4a07a89ba400108fa44d9a2f8689a8d2d9ec39a42ede36f\",\"dweb:/ipfs/QmeZywNZFB8b56ycbdqYJgMdYgg6bKbS2f4AwcSUjif3TX\"]},\"/home/circleci/repo/contracts/test-artifacts/CloneFactoryMock.sol\":{\"keccak256\":\"0x967d230e8865dad7a6e1e9b50507ccc765654e4ef96524c432091fab844cbfc4\",\"urls\":[\"bzz-raw://f94140f276f667c471b4001452aac3ad58485133d8115ccd7b0642774f7b438d\",\"dweb:/ipfs/QmPQmMebmzioKFSQbTn8V5FDA8pywjH8XbuVGFZx5yfvxN\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610561806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063321660e41461005157806357894c1b1461008c5780639789e5bf146100bf578063dda1670f14610121575b600080fd5b61008a6004803603604081101561006757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610168565b005b61008a600480360360208110156100a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101e2565b6100f8600480360360408110156100d557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610254565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101546004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610285565b604080519115158252519081900360200190f35b600061019073ffffffffffffffffffffffffffffffffffffffff84168363ffffffff6102ae16565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a1505050565b60006102038273ffffffffffffffffffffffffffffffffffffffff16610400565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a15050565b600061027c73ffffffffffffffffffffffffffffffffffffffff84168363ffffffff61046416565b90505b92915050565b60006102a68273ffffffffffffffffffffffffffffffffffffffff16610501565b90505b919050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260378120836101008301527fff0000000000000000000000000000000000000000000000000000000000000060408301523060601b60418301526101008201516055830152806075830152605560408301209250823b6000811461036c576000935061037b565b6101008301516037846000f593505b50505073ffffffffffffffffffffffffffffffffffffffff811661027f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50524f58595f4445504c4f595f4641494c454400000000000000000000000000604482015290519081900360640190fd5b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09392505050565b6040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606092831b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152603781207fff0000000000000000000000000000000000000000000000000000000000000082523090931b6001820152601581019190915260358101919091526055902090565b600073ffffffffffffffffffffffffffffffffffffffff8216610526575060006102a9565b503b159056fea265627a7a723158201f06bab68aea9bfc7a7e661031535b77d9513fdf17fe7d391142494ff207e4dd64736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063321660e41461005157806357894c1b1461008c5780639789e5bf146100bf578063dda1670f14610121575b600080fd5b61008a6004803603604081101561006757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610168565b005b61008a600480360360208110156100a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101e2565b6100f8600480360360408110156100d557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610254565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101546004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610285565b604080519115158252519081900360200190f35b600061019073ffffffffffffffffffffffffffffffffffffffff84168363ffffffff6102ae16565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a1505050565b60006102038273ffffffffffffffffffffffffffffffffffffffff16610400565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fbe2f3d28fdeb5839123d65fd47ec2f5915c715d2b527b9e229123706fdecfc85919081900360200190a15050565b600061027c73ffffffffffffffffffffffffffffffffffffffff84168363ffffffff61046416565b90505b92915050565b60006102a68273ffffffffffffffffffffffffffffffffffffffff16610501565b90505b919050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260378120836101008301527fff0000000000000000000000000000000000000000000000000000000000000060408301523060601b60418301526101008201516055830152806075830152605560408301209250823b6000811461036c576000935061037b565b6101008301516037846000f593505b50505073ffffffffffffffffffffffffffffffffffffffff811661027f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50524f58595f4445504c4f595f4641494c454400000000000000000000000000604482015290519081900360640190fd5b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09392505050565b6040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606092831b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152603781207fff0000000000000000000000000000000000000000000000000000000000000082523090931b6001820152601581019190915260358101919091526055902090565b600073ffffffffffffffffffffffffffffffffffffffff8216610526575060006102a9565b503b159056fea265627a7a723158201f06bab68aea9bfc7a7e661031535b77d9513fdf17fe7d391142494ff207e4dd64736f6c63430005110032",
  "sourceMap": "179:832:14:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;179:832:14;;;;;;;",
  "deployedSourceMap": "179:832:14:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;179:832:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;530:159;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;530:159:14;;;;;;;;;:::i;:::-;;391:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;391:135:14;;;;:::i;845:164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;845:164:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;693:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;693:148:14;;;;:::i;:::-;;;;;;;;;;;;;;;;;;530:159;611:14;628:25;:19;;;648:4;628:25;:19;:25;:::i;:::-;664:20;;;;;;;;;;611:42;;-1:-1:-1;664:20:14;;;;;;;;;;530:159;;;:::o;391:135::-;453:14;470:20;:6;:18;;;:20::i;:::-;501;;;;;;;;;;453:37;;-1:-1:-1;501:20:14;;;;;;;;;;391:135;;:::o;845:164::-;938:20;975:29;:23;;;999:4;975:29;:23;:29;:::i;:::-;968:36;;845:164;;;;;:::o;693:148::-;779:4;800:36;:15;:34;;;:36::i;:::-;793:43;;693:148;;;;:::o;873:1708:8:-;959:20;1063:4;1057:11;1206:66;1197:7;1190:83;1315:6;1311:2;1307:15;1300:4;1291:7;1287:18;1280:43;1357:66;1350:4;1341:7;1337:18;1330:94;1700:4;1691:7;1681:24;1762:4;1754:5;1745:7;1741:19;1734:33;1843:66;1836:4;1827:7;1823:18;1816:94;1966:7;1962:2;1958:16;1951:4;1942:7;1938:18;1931:44;2042:5;2033:7;2029:19;2023:26;2016:4;2007:7;2003:18;1996:54;2098:16;2091:4;2082:7;2078:18;2071:44;2169:4;2162;2153:7;2149:18;2139:35;2123:51;;2201:12;2189:25;2226:1;2221:161;;;;2423:1;2407:17;;2182:250;;2221:161;2366:5;2357:7;2353:19;2347:26;2341:4;2332:7;2329:1;2321:53;2305:69;;2182:250;-1:-1:-1;;;2526:26:8;;;2518:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;418:452:10;485:14;581:4;575:11;607:66;600:5;593:81;714:6;710:2;706:15;699:4;692:5;688:16;681:41;754:66;747:4;740:5;736:16;729:92;855:4;848:5;845:1;838:22;828:32;554:312;-1:-1:-1;;;554:312:10:o;169:982:9:-;368:4;362:11;488:66;472:83;;593:2;589:15;;;582:4;569:18;;562:43;639:66;632:4;619:18;;612:94;785:4;766:24;;828:66;812:83;;964:7;956:16;;;950:3;937:17;;930:43;1015:4;1002:18;;995:32;;;;1069:4;1056:18;;1049:44;;;;1136:4;1117:24;;;339:808::o;170:309:11:-;258:4;275:29;;;272:65;;-1:-1:-1;325:5:11;318:12;;272:65;-1:-1:-1;418:28:11;465:9;;170:309::o",
  "source": "pragma solidity ^0.5.0;\n\nimport '../proxies/CloneFactory.sol';\nimport '../proxies/Clone2Factory.sol';\nimport '../proxies/Clone2Probe.sol';\nimport '../proxies/Create2Probe.sol';\n\n\ncontract CloneFactoryMock\n{\n  using CloneFactory for address;\n  using Clone2Factory for address;\n  using Clone2Probe for address;\n  using Create2Probe for address;\n\n  event CloneCreated(address proxyAddress);\n\n  function createClone(\n    address target\n  ) external\n  {\n    address result = target.createClone();\n    emit CloneCreated(result);\n  }\n\n  function createClone2(\n    address target,\n    bytes32 salt\n  ) external\n  {\n    address result = target.createClone2(salt);\n    emit CloneCreated(result);\n  }\n\n  function isAddressAvailable(\n    address contractAddress\n  ) public view\n    returns (bool)\n  {\n    return contractAddress.isAddressAvailable();\n  }\n\n  function getClone2Address(\n    address target,\n    bytes32 salt\n  ) public view\n    returns (address cloneAddress)\n  {\n    return target.getClone2Address(salt);\n  }\n}\n",
  "sourcePath": "/home/circleci/repo/contracts/test-artifacts/CloneFactoryMock.sol",
  "ast": {
    "absolutePath": "/home/circleci/repo/contracts/test-artifacts/CloneFactoryMock.sol",
    "exportedSymbols": {
      "CloneFactoryMock": [
        1615
      ]
    },
    "id": 1616,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1532,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:14"
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/CloneFactory.sol",
        "file": "../proxies/CloneFactory.sol",
        "id": 1533,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1379,
        "src": "25:37:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/Clone2Factory.sol",
        "file": "../proxies/Clone2Factory.sol",
        "id": 1534,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1353,
        "src": "63:38:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/Clone2Probe.sol",
        "file": "../proxies/Clone2Probe.sol",
        "id": 1535,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1367,
        "src": "102:36:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/Create2Probe.sol",
        "file": "../proxies/Create2Probe.sol",
        "id": 1536,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1407,
        "src": "139:37:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1615,
        "linearizedBaseContracts": [
          1615
        ],
        "name": "CloneFactoryMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1539,
            "libraryName": {
              "contractScope": null,
              "id": 1537,
              "name": "CloneFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1378,
              "src": "215:12:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CloneFactory_$1378",
                "typeString": "library CloneFactory"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "209:31:14",
            "typeName": {
              "id": 1538,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "232:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1542,
            "libraryName": {
              "contractScope": null,
              "id": 1540,
              "name": "Clone2Factory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1352,
              "src": "249:13:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Clone2Factory_$1352",
                "typeString": "library Clone2Factory"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "243:32:14",
            "typeName": {
              "id": 1541,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "267:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1545,
            "libraryName": {
              "contractScope": null,
              "id": 1543,
              "name": "Clone2Probe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1366,
              "src": "284:11:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Clone2Probe_$1366",
                "typeString": "library Clone2Probe"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "278:30:14",
            "typeName": {
              "id": 1544,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "300:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1548,
            "libraryName": {
              "contractScope": null,
              "id": 1546,
              "name": "Create2Probe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1406,
              "src": "317:12:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Create2Probe_$1406",
                "typeString": "library Create2Probe"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "311:31:14",
            "typeName": {
              "id": 1547,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "334:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1552,
            "name": "CloneCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1551,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1550,
                  "indexed": false,
                  "name": "proxyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1552,
                  "src": "365:20:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1549,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "365:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "364:22:14"
            },
            "src": "346:41:14"
          },
          {
            "body": {
              "id": 1567,
              "nodeType": "Block",
              "src": "447:79:14",
              "statements": [
                {
                  "assignments": [
                    1558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1558,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1567,
                      "src": "453:14:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1557,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "453:7:14",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1562,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1559,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1554,
                        "src": "470:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createClone",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1377,
                      "src": "470:18:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) returns (address)"
                      }
                    },
                    "id": 1561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "470:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "453:37:14"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1564,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1558,
                        "src": "514:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1563,
                      "name": "CloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "501:12:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "501:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1566,
                  "nodeType": "EmitStatement",
                  "src": "496:25:14"
                }
              ]
            },
            "documentation": null,
            "id": 1568,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createClone",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1554,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 1568,
                  "src": "417:14:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "417:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "411:24:14"
            },
            "returnParameters": {
              "id": 1556,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "447:0:14"
            },
            "scope": 1615,
            "src": "391:135:14",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1586,
              "nodeType": "Block",
              "src": "605:84:14",
              "statements": [
                {
                  "assignments": [
                    1576
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1576,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1586,
                      "src": "611:14:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1575,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "611:7:14",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1581,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1579,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1572,
                        "src": "648:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1577,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1570,
                        "src": "628:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createClone2",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1351,
                      "src": "628:19:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes32) returns (address)"
                      }
                    },
                    "id": 1580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "628:25:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "611:42:14"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1583,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1576,
                        "src": "677:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1582,
                      "name": "CloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "664:12:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "664:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1585,
                  "nodeType": "EmitStatement",
                  "src": "659:25:14"
                }
              ]
            },
            "documentation": null,
            "id": 1587,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createClone2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1570,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 1587,
                  "src": "557:14:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1569,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "557:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1572,
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 1587,
                  "src": "577:12:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1571,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "551:42:14"
            },
            "returnParameters": {
              "id": 1574,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "605:0:14"
            },
            "scope": 1615,
            "src": "530:159:14",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1598,
              "nodeType": "Block",
              "src": "787:54:14",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1594,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1589,
                        "src": "800:15:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isAddressAvailable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1405,
                      "src": "800:34:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 1596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "800:36:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1593,
                  "id": 1597,
                  "nodeType": "Return",
                  "src": "793:43:14"
                }
              ]
            },
            "documentation": null,
            "id": 1599,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAddressAvailable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1589,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1599,
                  "src": "726:23:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "726:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "720:33:14"
            },
            "returnParameters": {
              "id": 1593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1592,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1599,
                  "src": "779:4:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1591,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "779:4:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "778:6:14"
            },
            "scope": 1615,
            "src": "693:148:14",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1613,
              "nodeType": "Block",
              "src": "962:47:14",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1610,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1603,
                        "src": "999:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1608,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1601,
                        "src": "975:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getClone2Address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1365,
                      "src": "975:23:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes32) view returns (address)"
                      }
                    },
                    "id": 1611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "975:29:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1607,
                  "id": 1612,
                  "nodeType": "Return",
                  "src": "968:36:14"
                }
              ]
            },
            "documentation": null,
            "id": 1614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getClone2Address",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1601,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 1614,
                  "src": "876:14:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "876:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1603,
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 1614,
                  "src": "896:12:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1602,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "896:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "870:42:14"
            },
            "returnParameters": {
              "id": 1607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1606,
                  "name": "cloneAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1614,
                  "src": "938:20:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1605,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "938:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "937:22:14"
            },
            "scope": 1615,
            "src": "845:164:14",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1616,
        "src": "179:832:14"
      }
    ],
    "src": "0:1012:14"
  },
  "legacyAST": {
    "absolutePath": "/home/circleci/repo/contracts/test-artifacts/CloneFactoryMock.sol",
    "exportedSymbols": {
      "CloneFactoryMock": [
        1615
      ]
    },
    "id": 1616,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1532,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:14"
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/CloneFactory.sol",
        "file": "../proxies/CloneFactory.sol",
        "id": 1533,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1379,
        "src": "25:37:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/Clone2Factory.sol",
        "file": "../proxies/Clone2Factory.sol",
        "id": 1534,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1353,
        "src": "63:38:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/Clone2Probe.sol",
        "file": "../proxies/Clone2Probe.sol",
        "id": 1535,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1367,
        "src": "102:36:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/circleci/repo/contracts/proxies/Create2Probe.sol",
        "file": "../proxies/Create2Probe.sol",
        "id": 1536,
        "nodeType": "ImportDirective",
        "scope": 1616,
        "sourceUnit": 1407,
        "src": "139:37:14",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1615,
        "linearizedBaseContracts": [
          1615
        ],
        "name": "CloneFactoryMock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 1539,
            "libraryName": {
              "contractScope": null,
              "id": 1537,
              "name": "CloneFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1378,
              "src": "215:12:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CloneFactory_$1378",
                "typeString": "library CloneFactory"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "209:31:14",
            "typeName": {
              "id": 1538,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "232:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1542,
            "libraryName": {
              "contractScope": null,
              "id": 1540,
              "name": "Clone2Factory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1352,
              "src": "249:13:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Clone2Factory_$1352",
                "typeString": "library Clone2Factory"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "243:32:14",
            "typeName": {
              "id": 1541,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "267:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1545,
            "libraryName": {
              "contractScope": null,
              "id": 1543,
              "name": "Clone2Probe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1366,
              "src": "284:11:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Clone2Probe_$1366",
                "typeString": "library Clone2Probe"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "278:30:14",
            "typeName": {
              "id": 1544,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "300:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 1548,
            "libraryName": {
              "contractScope": null,
              "id": 1546,
              "name": "Create2Probe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1406,
              "src": "317:12:14",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Create2Probe_$1406",
                "typeString": "library Create2Probe"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "311:31:14",
            "typeName": {
              "id": 1547,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "334:7:14",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1552,
            "name": "CloneCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1551,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1550,
                  "indexed": false,
                  "name": "proxyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1552,
                  "src": "365:20:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1549,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "365:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "364:22:14"
            },
            "src": "346:41:14"
          },
          {
            "body": {
              "id": 1567,
              "nodeType": "Block",
              "src": "447:79:14",
              "statements": [
                {
                  "assignments": [
                    1558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1558,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1567,
                      "src": "453:14:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1557,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "453:7:14",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1562,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1559,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1554,
                        "src": "470:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createClone",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1377,
                      "src": "470:18:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) returns (address)"
                      }
                    },
                    "id": 1561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "470:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "453:37:14"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1564,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1558,
                        "src": "514:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1563,
                      "name": "CloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "501:12:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "501:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1566,
                  "nodeType": "EmitStatement",
                  "src": "496:25:14"
                }
              ]
            },
            "documentation": null,
            "id": 1568,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createClone",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1554,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 1568,
                  "src": "417:14:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "417:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "411:24:14"
            },
            "returnParameters": {
              "id": 1556,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "447:0:14"
            },
            "scope": 1615,
            "src": "391:135:14",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1586,
              "nodeType": "Block",
              "src": "605:84:14",
              "statements": [
                {
                  "assignments": [
                    1576
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1576,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1586,
                      "src": "611:14:14",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1575,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "611:7:14",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1581,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1579,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1572,
                        "src": "648:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1577,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1570,
                        "src": "628:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createClone2",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1351,
                      "src": "628:19:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes32) returns (address)"
                      }
                    },
                    "id": 1580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "628:25:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "611:42:14"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1583,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1576,
                        "src": "677:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1582,
                      "name": "CloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "664:12:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "664:20:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1585,
                  "nodeType": "EmitStatement",
                  "src": "659:25:14"
                }
              ]
            },
            "documentation": null,
            "id": 1587,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createClone2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1570,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 1587,
                  "src": "557:14:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1569,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "557:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1572,
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 1587,
                  "src": "577:12:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1571,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "551:42:14"
            },
            "returnParameters": {
              "id": 1574,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "605:0:14"
            },
            "scope": 1615,
            "src": "530:159:14",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1598,
              "nodeType": "Block",
              "src": "787:54:14",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1594,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1589,
                        "src": "800:15:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isAddressAvailable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1405,
                      "src": "800:34:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 1596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "800:36:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1593,
                  "id": 1597,
                  "nodeType": "Return",
                  "src": "793:43:14"
                }
              ]
            },
            "documentation": null,
            "id": 1599,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAddressAvailable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1589,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1599,
                  "src": "726:23:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "726:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "720:33:14"
            },
            "returnParameters": {
              "id": 1593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1592,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1599,
                  "src": "779:4:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1591,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "779:4:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "778:6:14"
            },
            "scope": 1615,
            "src": "693:148:14",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1613,
              "nodeType": "Block",
              "src": "962:47:14",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1610,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1603,
                        "src": "999:4:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1608,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1601,
                        "src": "975:6:14",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getClone2Address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1365,
                      "src": "975:23:14",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes32) view returns (address)"
                      }
                    },
                    "id": 1611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "975:29:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1607,
                  "id": 1612,
                  "nodeType": "Return",
                  "src": "968:36:14"
                }
              ]
            },
            "documentation": null,
            "id": 1614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getClone2Address",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1601,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 1614,
                  "src": "876:14:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "876:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1603,
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 1614,
                  "src": "896:12:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1602,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "896:7:14",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "870:42:14"
            },
            "returnParameters": {
              "id": 1607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1606,
                  "name": "cloneAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1614,
                  "src": "938:20:14",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1605,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "938:7:14",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "937:22:14"
            },
            "scope": 1615,
            "src": "845:164:14",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1616,
        "src": "179:832:14"
      }
    ],
    "src": "0:1012:14"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2020-04-07T20:17:34.951Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}