{
  "contractName": "ICTFactory",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "icToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "DeployedICT",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "logic",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "salt",
          "type": "uint256"
        }
      ],
      "name": "NewEip1167Proxy",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "assetRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dataRegistry",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "marketObjectCode",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "salt",
          "type": "uint256"
        }
      ],
      "name": "createICToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"icToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"DeployedICT\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"logic\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"NewEip1167Proxy\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataRegistry\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"marketObjectCode\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createICToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"ICTFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Factory for deploying ProxySafeICT contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol\":\"ICTFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol\":{\"keccak256\":\"0xdb5541008c982a6caed3699fe0f73368f7e1ae305075558931d686f3056bba53\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://28762da3d9803a27403face7aa7bfe4a8a7c24a083d2e51aa37781597c2b2cff\",\"dweb:/ipfs/QmW6Cq9zTs9bUdQ1DJQSdzBtJnLeSkHcLzt5Wmie71FaNr\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/IInitializableICT.sol\":{\"keccak256\":\"0x05a23843bf803c53c9dcf7cfece6581e23ae982fe705c77486ee7c5b9d91be9a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c58dbdafc3c50b920cd4ad927530867913a9f08d7b480dc00c18142ea7068e02\",\"dweb:/ipfs/QmdQxVbSbGPM3nCNq82tTtL1hSrwxgQeSWtEVFQpPxdteU\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol\":{\"keccak256\":\"0xc3942bee11e73ceca1ef49154ba1a6dbe3ac25ce5e369d72db0f82185d1d10ba\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f1fc9bb98809b73920ac896aa9cbac809f3990a39f10dc06f2f3156f270dee79\",\"dweb:/ipfs/QmVPJojnqGrcMuJ1nvNbxJwLWBsbmkJtWePw55QU5Hk1Xc\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610383806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d8e5cef214610030575b600080fd5b61004361003e366004610230565b610045565b005b73__ICTLogic______________________________6000610066828461010f565b604051630a31ee5b60e41b81529091506001600160a01b0382169063a31ee5b09061009b908a908a908a908a906004016102a1565b600060405180830381600087803b1580156100b557600080fd5b505af11580156100c9573d6000803e3d6000fd5b505050507f1af6bc1501960679d5b97f2e1574cea49f4fd7dde0bab52d28c084829c76873d81336040516100fe929190610287565b60405180910390a150505050505050565b6000610123836001600160a01b03166101d7565b6101485760405162461bcd60e51b815260040161013f906102f0565b60405180910390fd5b60008360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b6028820152836037826000f59250507fc2c29c3f81ba655872ca88b28cde4cf13490e4c739b8da06ba28c0978590e6e08285856040516101c8939291906102cc565b60405180910390a15092915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061020b57508115155b949350505050565b80356001600160a01b038116811461022a57600080fd5b92915050565b600080600080600060a08688031215610247578081fd5b6102518787610213565b94506102608760208801610213565b9350604086013592506102768760608801610213565b949793965091946080013592915050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252603d908201527f50726f7879466163746f72792e637265617465324569703131363750726f787960408201527f3a20494e56414c49445f46554e4354494f4e5f504152414d455445525300000060608201526080019056fea2646970667358221220e0a815d8f56aad02651f6bb9f0ebfe56d327b9d2fe6d1f045b879c174aac221764736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d8e5cef214610030575b600080fd5b61004361003e366004610230565b610045565b005b73__ICTLogic______________________________6000610066828461010f565b604051630a31ee5b60e41b81529091506001600160a01b0382169063a31ee5b09061009b908a908a908a908a906004016102a1565b600060405180830381600087803b1580156100b557600080fd5b505af11580156100c9573d6000803e3d6000fd5b505050507f1af6bc1501960679d5b97f2e1574cea49f4fd7dde0bab52d28c084829c76873d81336040516100fe929190610287565b60405180910390a150505050505050565b6000610123836001600160a01b03166101d7565b6101485760405162461bcd60e51b815260040161013f906102f0565b60405180910390fd5b60008360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b6028820152836037826000f59250507fc2c29c3f81ba655872ca88b28cde4cf13490e4c739b8da06ba28c0978590e6e08285856040516101c8939291906102cc565b60405180910390a15092915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061020b57508115155b949350505050565b80356001600160a01b038116811461022a57600080fd5b92915050565b600080600080600060a08688031215610247578081fd5b6102518787610213565b94506102608760208801610213565b9350604086013592506102768760608801610213565b949793965091946080013592915050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252603d908201527f50726f7879466163746f72792e637265617465324569703131363750726f787960408201527f3a20494e56414c49445f46554e4354494f4e5f504152414d455445525300000060608201526080019056fea2646970667358221220e0a815d8f56aad02651f6bb9f0ebfe56d327b9d2fe6d1f045b879c174aac221764736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "483:799:65:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "483:799:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;830:450;;;;;;:::i;:::-;;:::i;:::-;;;1046:17;1030:13;1092:32;1046:17;1119:4;1092:19;:32::i;:::-;1134:91;;-1:-1:-1;;;1134:91:65;;1074:50;;-1:-1:-1;;;;;;1134:37:65;;;;;:91;;1172:13;;1187:12;;1201:16;;1219:5;;1134:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1241:32;1253:7;1262:10;1241:32;;;;;;;:::i;:::-;;;;;;;;830:450;;;;;;;:::o;613:1140:72:-;689:15;741:18;:5;-1:-1:-1;;;;;741:16:72;;:18::i;:::-;720:126;;;;-1:-1:-1;;;720:126:72;;;;;;;:::i;:::-;;;;;;;;;857:19;887:5;879:14;;857:36;;948:4;942:11;-1:-1:-1;;;1279:8:72;1272:84;1397:11;1390:4;1380:8;1376:19;1369:40;-1:-1:-1;;;1443:4:72;1433:8;1429:19;1422:95;1667:4;1626;1600:8;1567:1;1542:143;1531:154;;;1709:37;1725:7;1734:5;1741:4;1709:37;;;;;;;;:::i;:::-;;;;;;;;613:1140;;;;;:::o;685:610:113:-;745:4;1206:20;;1051:66;1245:23;;;;;;:42;;-1:-1:-1;1272:15:113;;;1245:42;1237:51;685:610;-1:-1:-1;;;;685:610:113:o;5:130:-1:-;72:20;;-1:-1;;;;;4286:54;;4869:35;;4859:2;;4918:1;;4908:12;4859:2;57:78;;;;:::o;416:743::-;;;;;;588:3;576:9;567:7;563:23;559:33;556:2;;;-1:-1;;595:12;556:2;657:53;702:7;678:22;657:53;:::i;:::-;647:63;;765:53;810:7;747:2;790:9;786:22;765:53;:::i;:::-;755:63;;855:2;898:9;894:22;209:20;863:63;;981:53;1026:7;963:2;1006:9;1002:22;981:53;:::i;:::-;550:609;;;;-1:-1;550:609;;1071:3;1111:22;346:20;;550:609;-1:-1;;550:609::o;2082:349::-;-1:-1;;;;;4286:54;;;1386:37;;4286:54;;2417:2;2402:18;;1245:58;2245:2;2230:18;;2216:215::o;2438:556::-;-1:-1;;;;;4286:54;;;1386:37;;4286:54;;;2814:2;2799:18;;1386:37;2897:2;2882:18;;1506:37;;;;4286:54;;;2980:2;2965:18;;1386:37;2649:3;2634:19;;2620:374::o;3001:444::-;-1:-1;;;;;4286:54;;;1386:37;;4286:54;;;;3348:2;3333:18;;1386:37;3431:2;3416:18;;1506:37;;;;3184:2;3169:18;;3155:290::o;3452:416::-;3652:2;3666:47;;;1780:2;3637:18;;;3979:19;1816:34;4019:14;;;1796:55;1885:31;1871:12;;;1864:53;1936:12;;;3623:245::o",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\";\nimport \"./IInitializableICT.sol\";\nimport \"../proxy/ProxyFactory.sol\";\n\n// @dev Mock lib to link pre-deployed ProxySafeICT contract\nlibrary ICTLogic {\n    function _() public pure { revert(\"never deploy it\"); }\n}\n\n/**\n * @title ICTFactory\n * @notice Factory for deploying ProxySafeICT contracts\n */\ncontract ICTFactory is ProxyFactory {\n\n    event DeployedICT(address icToken, address creator);\n\n\n    /*\n     * deploys and initializes a new ICT (proxy) contract\n     * @param assetRegistry\n     * @param dataRegistry\n     * @param marketObjectCode\n     * @param owner of the new ICT contract\n     * @param salt as defined by EIP-1167\n     */\n    function createICToken(\n        address assetRegistry,\n        address dataRegistry,\n        bytes32 marketObjectCode,\n        address owner,\n        uint256 salt\n    )\n        external\n    {\n        address logic = address(ICTLogic);\n\n        address icToken = create2Eip1167Proxy(logic, salt);\n        IInitializableICT(icToken).initialize(assetRegistry, dataRegistry, marketObjectCode, owner);\n\n        emit DeployedICT(icToken, msg.sender);\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol",
    "exportedSymbols": {
      "ICTFactory": [
        21275
      ],
      "ICTLogic": [
        21221
      ]
    },
    "id": 21276,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21208,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:65"
      },
      {
        "id": 21209,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:65"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 21210,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 38236,
        "src": "101:83:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/IInitializableICT.sol",
        "file": "./IInitializableICT.sol",
        "id": 21211,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 21291,
        "src": "185:33:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 21212,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 22446,
        "src": "219:35:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 21221,
        "linearizedBaseContracts": [
          21221
        ],
        "name": "ICTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 21219,
              "nodeType": "Block",
              "src": "364:30:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 21216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "373:17:65",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 21215,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "366:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 21217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "366:25:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21218,
                  "nodeType": "ExpressionStatement",
                  "src": "366:25:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 21220,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "349:2:65"
            },
            "returnParameters": {
              "id": 21214,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "364:0:65"
            },
            "scope": 21221,
            "src": "339:55:65",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 21276,
        "src": "316:80:65"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21223,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "506:12:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 21224,
            "nodeType": "InheritanceSpecifier",
            "src": "506:12:65"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21222,
          "nodeType": "StructuredDocumentation",
          "src": "398:84:65",
          "text": " @title ICTFactory\n @notice Factory for deploying ProxySafeICT contracts"
        },
        "fullyImplemented": true,
        "id": 21275,
        "linearizedBaseContracts": [
          21275,
          22445
        ],
        "name": "ICTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 21230,
            "name": "DeployedICT",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 21229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21226,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "icToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "544:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "544:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21228,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "561:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21227,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "543:34:65"
            },
            "src": "526:52:65"
          },
          {
            "body": {
              "id": 21273,
              "nodeType": "Block",
              "src": "1020:260:65",
              "statements": [
                {
                  "assignments": [
                    21244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21244,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1030:13:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21243,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1030:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21249,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21247,
                        "name": "ICTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21221,
                        "src": "1054:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      ],
                      "id": 21246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1046:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 21245,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1046:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1046:17:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1030:33:65"
                },
                {
                  "assignments": [
                    21251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21251,
                      "mutability": "mutable",
                      "name": "icToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1074:15:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21250,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1074:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21253,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21244,
                        "src": "1112:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21254,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21240,
                        "src": "1119:4:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21252,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "1092:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 21255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1092:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1074:50:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21261,
                        "name": "assetRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21232,
                        "src": "1172:13:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21262,
                        "name": "dataRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21234,
                        "src": "1187:12:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21263,
                        "name": "marketObjectCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "1201:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21264,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21238,
                        "src": "1219:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21258,
                            "name": "icToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21251,
                            "src": "1152:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21257,
                          "name": "IInitializableICT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21290,
                          "src": "1134:17:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableICT_$21290_$",
                            "typeString": "type(contract IInitializableICT)"
                          }
                        },
                        "id": 21259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1134:26:65",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableICT_$21290",
                          "typeString": "contract IInitializableICT"
                        }
                      },
                      "id": 21260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "1134:37:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 21265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:91:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21266,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:91:65"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21268,
                        "name": "icToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21251,
                        "src": "1253:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21269,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1262:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1262:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 21267,
                      "name": "DeployedICT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21230,
                      "src": "1241:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 21271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1241:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21272,
                  "nodeType": "EmitStatement",
                  "src": "1236:37:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "d8e5cef2",
            "id": 21274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createICToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21241,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21232,
                  "mutability": "mutable",
                  "name": "assetRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "862:21:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21231,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21234,
                  "mutability": "mutable",
                  "name": "dataRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "893:20:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21233,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "893:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21236,
                  "mutability": "mutable",
                  "name": "marketObjectCode",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "923:24:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21235,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "923:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21238,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "957:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "957:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21240,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "980:12:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21239,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "852:146:65"
            },
            "returnParameters": {
              "id": 21242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1020:0:65"
            },
            "scope": 21275,
            "src": "830:450:65",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 21276,
        "src": "483:799:65"
      }
    ],
    "src": "41:1242:65"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/ICTFactory.sol",
    "exportedSymbols": {
      "ICTFactory": [
        21275
      ],
      "ICTLogic": [
        21221
      ]
    },
    "id": 21276,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21208,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:65"
      },
      {
        "id": 21209,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:65"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 21210,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 38236,
        "src": "101:83:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/IInitializableICT.sol",
        "file": "./IInitializableICT.sol",
        "id": 21211,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 21291,
        "src": "185:33:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 21212,
        "nodeType": "ImportDirective",
        "scope": 21276,
        "sourceUnit": 22446,
        "src": "219:35:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 21221,
        "linearizedBaseContracts": [
          21221
        ],
        "name": "ICTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 21219,
              "nodeType": "Block",
              "src": "364:30:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 21216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "373:17:65",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 21215,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "366:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 21217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "366:25:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21218,
                  "nodeType": "ExpressionStatement",
                  "src": "366:25:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 21220,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "349:2:65"
            },
            "returnParameters": {
              "id": 21214,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "364:0:65"
            },
            "scope": 21221,
            "src": "339:55:65",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 21276,
        "src": "316:80:65"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21223,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "506:12:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 21224,
            "nodeType": "InheritanceSpecifier",
            "src": "506:12:65"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21222,
          "nodeType": "StructuredDocumentation",
          "src": "398:84:65",
          "text": " @title ICTFactory\n @notice Factory for deploying ProxySafeICT contracts"
        },
        "fullyImplemented": true,
        "id": 21275,
        "linearizedBaseContracts": [
          21275,
          22445
        ],
        "name": "ICTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 21230,
            "name": "DeployedICT",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 21229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21226,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "icToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "544:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "544:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21228,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21230,
                  "src": "561:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21227,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "543:34:65"
            },
            "src": "526:52:65"
          },
          {
            "body": {
              "id": 21273,
              "nodeType": "Block",
              "src": "1020:260:65",
              "statements": [
                {
                  "assignments": [
                    21244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21244,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1030:13:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21243,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1030:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21249,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21247,
                        "name": "ICTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21221,
                        "src": "1054:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_ICTLogic_$21221_$",
                          "typeString": "type(library ICTLogic)"
                        }
                      ],
                      "id": 21246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1046:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 21245,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1046:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1046:17:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1030:33:65"
                },
                {
                  "assignments": [
                    21251
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21251,
                      "mutability": "mutable",
                      "name": "icToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21273,
                      "src": "1074:15:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21250,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1074:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21253,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21244,
                        "src": "1112:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21254,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21240,
                        "src": "1119:4:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21252,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "1092:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 21255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1092:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1074:50:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21261,
                        "name": "assetRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21232,
                        "src": "1172:13:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21262,
                        "name": "dataRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21234,
                        "src": "1187:12:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21263,
                        "name": "marketObjectCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "1201:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21264,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21238,
                        "src": "1219:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21258,
                            "name": "icToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21251,
                            "src": "1152:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21257,
                          "name": "IInitializableICT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21290,
                          "src": "1134:17:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableICT_$21290_$",
                            "typeString": "type(contract IInitializableICT)"
                          }
                        },
                        "id": 21259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1134:26:65",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableICT_$21290",
                          "typeString": "contract IInitializableICT"
                        }
                      },
                      "id": 21260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21289,
                      "src": "1134:37:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 21265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:91:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21266,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:91:65"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21268,
                        "name": "icToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21251,
                        "src": "1253:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21269,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1262:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1262:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 21267,
                      "name": "DeployedICT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21230,
                      "src": "1241:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 21271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1241:32:65",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21272,
                  "nodeType": "EmitStatement",
                  "src": "1236:37:65"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "d8e5cef2",
            "id": 21274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createICToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21241,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21232,
                  "mutability": "mutable",
                  "name": "assetRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "862:21:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21231,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21234,
                  "mutability": "mutable",
                  "name": "dataRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "893:20:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21233,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "893:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21236,
                  "mutability": "mutable",
                  "name": "marketObjectCode",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "923:24:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21235,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "923:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21238,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "957:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "957:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21240,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21274,
                  "src": "980:12:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21239,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "980:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "852:146:65"
            },
            "returnParameters": {
              "id": 21242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1020:0:65"
            },
            "scope": 21275,
            "src": "830:450:65",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 21276,
        "src": "483:799:65"
      }
    ],
    "src": "41:1242:65"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {
    "1994": {
      "events": {
        "0x1af6bc1501960679d5b97f2e1574cea49f4fd7dde0bab52d28c084829c76873d": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "icToken",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "name": "DeployedICT",
          "type": "event"
        },
        "0xc2c29c3f81ba655872ca88b28cde4cf13490e4c739b8da06ba28c0978590e6e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "proxy",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "logic",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "salt",
              "type": "uint256"
            }
          ],
          "name": "NewEip1167Proxy",
          "type": "event"
        }
      },
      "links": {
        "ICTLogic": "0xA9C613909EA956e3a5ceb0618CD1405098164740"
      },
      "address": "0xeD97d7906eB32753A56ea90Bcb1B9B1e9484b0CC",
      "transactionHash": "0xa4d3fd8f8350b69b4050d3757e8fc351e70ae32c5ca2d4b4f2d8a7f4ab9c9c6c"
    }
  },
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.213Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "title": "ICTFactory",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "Factory for deploying ProxySafeICT contracts",
    "version": 1
  }
}