{
  "contractName": "ContractRegistry",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_contractName",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_contractAddress",
          "type": "address"
        }
      ],
      "name": "AddressUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_prevOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerUpdate",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "contractNames",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "newOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "itemCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_contractName",
          "type": "bytes32"
        }
      ],
      "name": "addressOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_contractName",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_contractAddress",
          "type": "address"
        }
      ],
      "name": "registerAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_contractName",
          "type": "bytes32"
        }
      ],
      "name": "unregisterAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_contractName",
          "type": "bytes32"
        }
      ],
      "name": "getAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_contractAddress\",\"type\":\"address\"}],\"name\":\"AddressUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"addressOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"contractNames\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"itemCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_contractAddress\",\"type\":\"address\"}],\"name\":\"registerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"unregisterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract Registry The contract registry keeps contract addresses by name. The owner can update contract addresses so that a contract name always points to the latest version of the given contract. Other contracts can query the registry to get updated addresses instead of depending on specific addresses. Note that contract names are limited to 32 bytes UTF8 encoded ASCII strings to optimize gas costs\",\"events\":{\"AddressUpdate(bytes32,address)\":{\"details\":\"triggered when an address pointed to by a contract name is modified\",\"params\":{\"_contractAddress\":\"new contract address\",\"_contractName\":\"contract name\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"used by a new owner to accept an ownership transfer\"},\"addressOf(bytes32)\":{\"details\":\"returns the address associated with the given contract name\",\"params\":{\"_contractName\":\"contract name\"},\"returns\":{\"_0\":\"contract address\"}},\"getAddress(bytes32)\":{\"details\":\"deprecated, backward compatibility\"},\"itemCount()\":{\"details\":\"returns the number of items in the registry\",\"returns\":{\"_0\":\"number of items\"}},\"registerAddress(bytes32,address)\":{\"details\":\"registers a new address for the contract name in the registry\",\"params\":{\"_contractAddress\":\"contract address\",\"_contractName\":\"contract name\"}},\"transferOwnership(address)\":{\"details\":\"allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner\",\"params\":{\"_newOwner\":\"new contract owner\"}},\"unregisterAddress(bytes32)\":{\"details\":\"removes an existing contract address from the registry\",\"params\":{\"_contractName\":\"contract name\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistry.sol\":\"ContractRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistry.sol\":{\"keccak256\":\"0x2c528338138def339adcf2cff6003747add2baec544025f9e00e8ac7ca3ae9a5\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://3bf4a4cd09bf05a9c83a7255989bddf55afe82e201e83492ca7d5dc3bb95eb22\",\"dweb:/ipfs/QmUBkzUfk5x8sAW4Xm9krmBkQCYx9nziKNdhMehbCCtoWT\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol\":{\"keccak256\":\"0x6ef69d9dcc80a8a36d5eb37783375cd5e4831c6d20c723fa6f6b6a06c0aeb53d\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://5a5d087e2c5b47739615ef22e1f29749de44b43c9a37cfae32b3dfc498a258c4\",\"dweb:/ipfs/Qmd1mXKEQbmBxqHk326LGVzNoayXsam8gZNecknnYpBnyh\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol\":{\"keccak256\":\"0x073efa69fcd6b5e60f841b28b366d63b62ff48ab12a06ce3f5a7f41afd6ce885\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e8b8ecb2d29197ca77f0ed98f728ace54e6edcfdf5cd1194ae22701607eaf608\",\"dweb:/ipfs/QmcsR6Q35Hurh3TrPkYAboicz9bQQoGCWmZLzUCDyhotH8\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol\":{\"keccak256\":\"0x3551889a83738b621c29ed66f1ecb6a843cca4217e54c9357198559b9cc92259\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://231a59c8f2665adeda8c7e6930832409c9b991fd27ad84b3a24335e7bf269bbe\",\"dweb:/ipfs/QmeJJbn1EAUbZenruTEdJAnwUn3dxsVNeJvxPe81qKEGqL\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IOwned.sol\":{\"keccak256\":\"0xc60a9d197abc28c1906ed4d18b59caa0242db754a0e1f67af6e6277593530dae\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://a8c6f3e6525a81a5165ccbf04f73f6c389c14b74135d11a7b5f70b1c9bdac75c\",\"dweb:/ipfs/QmaPu4Z7yUPc9sMADmoTZVY6AnyDSYHtNNCx3mm4VkJwhP\"]}},\"version\":1}",
  "bytecode": "[encoded data, 4996 characters]",
  "deployedBytecode": "[encoded data, 4896 characters]",
  "immutableReferences": {},
  "sourceMap": "633:5154:55:-:0;;;;;;;;;;;;-1:-1:-1;619:5:57;:18;;-1:-1:-1;;;;;;619:18:57;627:10;619:18;;;633:5154:55;;;;;;",
  "deployedSourceMap": "633:5154:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:123;;;;;;;;;;;;;;;;-1:-1:-1;5661:123:55;;:::i;:::-;;;;-1:-1:-1;;;;;5661:123:55;;;;;;;;;;;;;;3240:1394;;;;;;;;;;;;;;;;-1:-1:-1;3240:1394:55;;:::i;:::-;;971:29;;;;;;;;;;;;;;;;-1:-1:-1;971:29:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2129:964;;;;;;;;;;;;;;;;-1:-1:-1;2129:964:55;;;;;;-1:-1:-1;;;;;2129:964:55;;:::i;1482:97::-;;;:::i;:::-;;;;;;;;;;;;;;;;1422:217:57;;;:::i;219:29::-;;;:::i;1777:143:55:-;;;;;;;;;;;;;;;;-1:-1:-1;1777:143:55;;:::i;255:23:57:-;;;:::i;1164:167::-;;;;;;;;;;;;;;;;-1:-1:-1;1164:167:57;-1:-1:-1;;;;;1164:167:57;;:::i;5661:123:55:-;5725:7;5752:24;5762:13;5752:9;:24::i;:::-;5745:31;5661:123;-1:-1:-1;;5661:123:55:o;3240:1394::-;726:12:57;:10;:12::i;:::-;3465:1:55::1;3417:20:::0;;;:5:::1;:20;::::0;;;;:36;-1:-1:-1;;;;;3417:36:55::1;3409:79;;;::::0;;-1:-1:-1;;;3409:79:55;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3409:79:55;;;;;;;;;;;;;::::1;;3597:1;3550:20:::0;;;:5:::1;:20;::::0;;;;:49;;-1:-1:-1;;;;;;3550:49:55::1;::::0;;3862:13:::1;:20:::0;3550:49;-1:-1:-1;3858:488:55::1;;;3942:13;3956:20:::0;;3903:36:::1;::::0;3942:13;-1:-1:-1;;3956:24:55;;;3942:39;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;3903:78:::0;;::::1;::::0;;::::1;;-1:-1:-1::0;;3903:78:55::1;;::::0;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;3942:39:::0;3903:78;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3996:23;4022:5;:20;4028:13;4022:20;;;;;;;;;;;:30;;;3996:56;;4102:22;4069:13;4083:15;4069:30;;;;;;;;;;;;;;;:55;;;;;;;;;;;;:::i;:::-;;4139:24;4166:39;4182:22;4166:15;:39::i;:::-;4220:33;4256:23:::0;;;:5:::1;:23;::::0;;;;4294:22:::1;;:40:::0;;;;-1:-1:-1;;3858:488:55::1;4413:13;:19;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;::::0;;4521:1:::1;4488:20:::0;;;:5:::1;:20;::::0;;;;;;;:30:::1;;:34:::0;;;4586:40;;;;;;4494:13;;4586:40:::1;::::0;;;;;;;::::1;3240:1394:::0;:::o;971:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;971:29:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;971:29:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2129:964::-;726:12:57;:10;:12::i;:::-;2260:16:55::1;594:23:64;608:8;594:13;:23::i;:::-;2429:22:55::2;2454:20:::0;;;:5:::2;:20;::::0;;;;:36;-1:-1:-1;;;;;2454:36:55;;::::2;::::0;2505:34;::::2;::::0;::::2;2501:60;;;2554:7;;;2501:60;-1:-1:-1::0;;;;;2577:28:55;::::2;2573:288;;2707:13;:20:::0;;2674::::2;::::0;;;:5:::2;:20;::::0;;;;:30:::2;;:53:::0;2818:30:::2;2680:13:::0;2818:15:::2;:30::i;:::-;2799:50:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;2799:50:55;;;::::2;::::0;;;;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;::::2;:::i;:::-;;2573:288;2920:20;::::0;;;:5:::2;:20;::::0;;;;;;;;:55;;-1:-1:-1;;;;;;2920:55:55::2;-1:-1:-1::0;;;;;2920:55:55;::::2;::::0;;::::2;::::0;;;3039:46;;;;;;;2920:20;;3039:46:::2;::::0;;;;;;;::::2;628:1:64;;749::57::1;2129:964:55::0;;:::o;1482:97::-;1551:13;:20;1482:97;:::o;1422:217:57:-;1498:8;;-1:-1:-1;;;;;1498:8:57;1484:10;:22;1476:52;;;;;-1:-1:-1;;;1476:52:57;;;;;;;;;;;;-1:-1:-1;;;1476:52:57;;;;;;;;;;;;;;;1563:8;;;1556:5;;1544:28;;-1:-1:-1;;;;;1563:8:57;;;;1556:5;;;;1544:28;;;1591:8;;;;1583:16;;-1:-1:-1;;;;;;1583:16:57;;;-1:-1:-1;;;;;1591:8:57;;1583:16;;;;1610:21;;;1422:217::o;219:29::-;;;-1:-1:-1;;;;;219:29:57;;:::o;1777:143:55:-;1849:7;1876:20;;;:5;:20;;;;;:36;-1:-1:-1;;;;;1876:36:55;;1777:143::o;255:23:57:-;;;-1:-1:-1;;;;;255:23:57;;:::o;1164:167::-;726:12;:10;:12::i;:::-;1268:5:::1;::::0;-1:-1:-1;;;;;1255:18:57;;::::1;1268:5:::0;::::1;1255:18;;1247:45;;;::::0;;-1:-1:-1;;;1247:45:57;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1247:45:57;;;;;;;;;;;;;::::1;;1303:8;:20:::0;;-1:-1:-1;;;;;;1303:20:57::1;-1:-1:-1::0;;;;;1303:20:57;;;::::1;::::0;;;::::1;::::0;;1164:167::o;813:104::-;882:5;;-1:-1:-1;;;;;882:5:57;868:10;:19;860:49;;;;;-1:-1:-1;;;860:49:57;;;;;;;;;;;;-1:-1:-1;;;860:49:57;;;;;;;;;;;;;;;813:104::o;5374:213:55:-;5541:2;5529:15;5523:22;;5374:213::o;692:128:64:-;-1:-1:-1;;;;;766:22:64;;758:54;;;;;-1:-1:-1;;;758:54:64;;;;;;;;;;;;-1:-1:-1;;;758:54:64;;;;;;;;;;;;;;;692:128;:::o;4872:266:55:-;4986:13;;;4996:2;4986:13;;;;;;;;;4935;;;;4986;;;;;;;;;;;-1:-1:-1;4986:13:55;4961:38;;5015:9;5010:84;5034:2;5030:1;:6;5010:84;;;5073:6;5080:1;5073:9;;;;;;;;;;5058;5068:1;5058:12;;;;;;;;;;;:24;-1:-1:-1;;;;;5058:24:55;;;;;;;;-1:-1:-1;5038:3:55;;5010:84;;;-1:-1:-1;5120:9:55;4872:266;-1:-1:-1;;4872:266:55:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\nimport \"./Owned.sol\";\r\nimport \"./Utils.sol\";\r\nimport \"./interfaces/IContractRegistry.sol\";\r\n\r\n/**\r\n  * @dev Contract Registry\r\n  *\r\n  * The contract registry keeps contract addresses by name.\r\n  * The owner can update contract addresses so that a contract name always points to the latest version\r\n  * of the given contract.\r\n  * Other contracts can query the registry to get updated addresses instead of depending on specific\r\n  * addresses.\r\n  *\r\n  * Note that contract names are limited to 32 bytes UTF8 encoded ASCII strings to optimize gas costs\r\n*/\r\ncontract ContractRegistry is IContractRegistry, Owned, Utils {\r\n    struct RegistryItem {\r\n        address contractAddress;    // contract address\r\n        uint256 nameIndex;          // index of the item in the list of contract names\r\n    }\r\n\r\n    mapping (bytes32 => RegistryItem) private items;    // name -> RegistryItem mapping\r\n    string[] public contractNames;                      // list of all registered contract names\r\n\r\n    /**\r\n      * @dev triggered when an address pointed to by a contract name is modified\r\n      *\r\n      * @param _contractName    contract name\r\n      * @param _contractAddress new contract address\r\n    */\r\n    event AddressUpdate(bytes32 indexed _contractName, address _contractAddress);\r\n\r\n    /**\r\n      * @dev returns the number of items in the registry\r\n      *\r\n      * @return number of items\r\n    */\r\n    function itemCount() public view returns (uint256) {\r\n        return contractNames.length;\r\n    }\r\n\r\n    /**\r\n      * @dev returns the address associated with the given contract name\r\n      *\r\n      * @param _contractName    contract name\r\n      *\r\n      * @return contract address\r\n    */\r\n    function addressOf(bytes32 _contractName) public view override returns (address) {\r\n        return items[_contractName].contractAddress;\r\n    }\r\n\r\n    /**\r\n      * @dev registers a new address for the contract name in the registry\r\n      *\r\n      * @param _contractName     contract name\r\n      * @param _contractAddress  contract address\r\n    */\r\n    function registerAddress(bytes32 _contractName, address _contractAddress)\r\n        public\r\n        ownerOnly\r\n        validAddress(_contractAddress)\r\n    {\r\n        // validate input\r\n        require(_contractName.length > 0, \"ERR_INVALID_NAME\");\r\n\r\n        // check if any change is needed\r\n        address currentAddress = items[_contractName].contractAddress;\r\n        if (_contractAddress == currentAddress)\r\n            return;\r\n\r\n        if (currentAddress == address(0)) {\r\n            // update the item's index in the list\r\n            items[_contractName].nameIndex = contractNames.length;\r\n\r\n            // add the contract name to the name list\r\n            contractNames.push(bytes32ToString(_contractName));\r\n        }\r\n\r\n        // update the address in the registry\r\n        items[_contractName].contractAddress = _contractAddress;\r\n\r\n        // dispatch the address update event\r\n        emit AddressUpdate(_contractName, _contractAddress);\r\n    }\r\n\r\n    /**\r\n      * @dev removes an existing contract address from the registry\r\n      *\r\n      * @param _contractName contract name\r\n    */\r\n    function unregisterAddress(bytes32 _contractName) public ownerOnly {\r\n        // validate input\r\n        require(_contractName.length > 0, \"ERR_INVALID_NAME\");\r\n        require(items[_contractName].contractAddress != address(0), \"ERR_INVALID_NAME\");\r\n\r\n        // remove the address from the registry\r\n        items[_contractName].contractAddress = address(0);\r\n\r\n        // if there are multiple items in the registry, move the last element to the deleted element's position\r\n        // and modify last element's registryItem.nameIndex in the items collection to point to the right position in contractNames\r\n        if (contractNames.length > 1) {\r\n            string memory lastContractNameString = contractNames[contractNames.length - 1];\r\n            uint256 unregisterIndex = items[_contractName].nameIndex;\r\n\r\n            contractNames[unregisterIndex] = lastContractNameString;\r\n            bytes32 lastContractName = stringToBytes32(lastContractNameString);\r\n            RegistryItem storage registryItem = items[lastContractName];\r\n            registryItem.nameIndex = unregisterIndex;\r\n        }\r\n\r\n        // remove the last element from the name list\r\n        contractNames.pop();\r\n        // zero the deleted element's index\r\n        items[_contractName].nameIndex = 0;\r\n\r\n        // dispatch the address update event\r\n        emit AddressUpdate(_contractName, address(0));\r\n    }\r\n\r\n    /**\r\n      * @dev utility, converts bytes32 to a string\r\n      * note that the bytes32 argument is assumed to be UTF8 encoded ASCII string\r\n      *\r\n      * @return string representation of the given bytes32 argument\r\n    */\r\n    function bytes32ToString(bytes32 _bytes) private pure returns (string memory) {\r\n        bytes memory byteArray = new bytes(32);\r\n        for (uint256 i = 0; i < 32; i++) {\r\n            byteArray[i] = _bytes[i];\r\n        }\r\n\r\n        return string(byteArray);\r\n    }\r\n\r\n    /**\r\n      * @dev utility, converts string to bytes32\r\n      * note that the bytes32 argument is assumed to be UTF8 encoded ASCII string\r\n      *\r\n      * @return string representation of the given bytes32 argument\r\n    */\r\n    function stringToBytes32(string memory _string) private pure returns (bytes32) {\r\n        bytes32 result;\r\n        assembly {\r\n            result := mload(add(_string,32))\r\n        }\r\n        return result;\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function getAddress(bytes32 _contractName) public view returns (address) {\r\n        return addressOf(_contractName);\r\n    }\r\n}\r\n",
  "sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistry.sol",
  "ast": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistry.sol",
    "exportedSymbols": {
      "ContractRegistry": [
        21514
      ]
    },
    "id": 21515,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21214,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:55"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol",
        "file": "./Owned.sol",
        "id": 21215,
        "nodeType": "ImportDirective",
        "scope": 21515,
        "sourceUnit": 21819,
        "src": "77:21:55",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol",
        "file": "./Utils.sol",
        "id": 21216,
        "nodeType": "ImportDirective",
        "scope": 21515,
        "sourceUnit": 22662,
        "src": "100:21:55",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol",
        "file": "./interfaces/IContractRegistry.sol",
        "id": 21217,
        "nodeType": "ImportDirective",
        "scope": 21515,
        "sourceUnit": 22832,
        "src": "123:44:55",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21219,
              "name": "IContractRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22831,
              "src": "662:17:55",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                "typeString": "contract IContractRegistry"
              }
            },
            "id": 21220,
            "nodeType": "InheritanceSpecifier",
            "src": "662:17:55"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21221,
              "name": "Owned",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21818,
              "src": "681:5:55",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Owned_$21818",
                "typeString": "contract Owned"
              }
            },
            "id": 21222,
            "nodeType": "InheritanceSpecifier",
            "src": "681:5:55"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21223,
              "name": "Utils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22661,
              "src": "688:5:55",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Utils_$22661",
                "typeString": "contract Utils"
              }
            },
            "id": 21224,
            "nodeType": "InheritanceSpecifier",
            "src": "688:5:55"
          }
        ],
        "contractDependencies": [
          21818,
          22661,
          22831,
          22847
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21218,
          "nodeType": "StructuredDocumentation",
          "src": "171:460:55",
          "text": " @dev Contract Registry\n The contract registry keeps contract addresses by name.\n The owner can update contract addresses so that a contract name always points to the latest version\n of the given contract.\n Other contracts can query the registry to get updated addresses instead of depending on specific\n addresses.\n Note that contract names are limited to 32 bytes UTF8 encoded ASCII strings to optimize gas costs"
        },
        "fullyImplemented": true,
        "id": 21514,
        "linearizedBaseContracts": [
          21514,
          22661,
          21818,
          22847,
          22831
        ],
        "name": "ContractRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ContractRegistry.RegistryItem",
            "id": 21229,
            "members": [
              {
                "constant": false,
                "id": 21226,
                "mutability": "mutable",
                "name": "contractAddress",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 21229,
                "src": "732:23:55",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 21225,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "732:7:55",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 21228,
                "mutability": "mutable",
                "name": "nameIndex",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 21229,
                "src": "789:17:55",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 21227,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "789:7:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RegistryItem",
            "nodeType": "StructDefinition",
            "scope": 21514,
            "src": "701:173:55",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 21233,
            "mutability": "mutable",
            "name": "items",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21514,
            "src": "882:47:55",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
              "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem)"
            },
            "typeName": {
              "id": 21232,
              "keyType": {
                "id": 21230,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "891:7:55",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "882:33:55",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem)"
              },
              "valueType": {
                "contractScope": null,
                "id": 21231,
                "name": "RegistryItem",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21229,
                "src": "902:12:55",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                  "typeString": "struct ContractRegistry.RegistryItem"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "3ca6bb92",
            "id": 21236,
            "mutability": "mutable",
            "name": "contractNames",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21514,
            "src": "971:29:55",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
              "typeString": "string[]"
            },
            "typeName": {
              "baseType": {
                "id": 21234,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "971:6:55",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "id": 21235,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "971:8:55",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                "typeString": "string[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 21237,
              "nodeType": "StructuredDocumentation",
              "src": "1071:203:55",
              "text": " @dev triggered when an address pointed to by a contract name is modified\n @param _contractName    contract name\n @param _contractAddress new contract address"
            },
            "id": 21243,
            "name": "AddressUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 21242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21239,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21243,
                  "src": "1300:29:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21238,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1300:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21241,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21243,
                  "src": "1331:24:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1331:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1299:57:55"
            },
            "src": "1280:77:55"
          },
          {
            "body": {
              "id": 21252,
              "nodeType": "Block",
              "src": "1533:46:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 21249,
                      "name": "contractNames",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21236,
                      "src": "1551:13:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                        "typeString": "string storage ref[] storage ref"
                      }
                    },
                    "id": 21250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1551:20:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 21248,
                  "id": 21251,
                  "nodeType": "Return",
                  "src": "1544:27:55"
                }
              ]
            },
            "documentation": {
              "id": 21244,
              "nodeType": "StructuredDocumentation",
              "src": "1365:111:55",
              "text": " @dev returns the number of items in the registry\n @return number of items"
            },
            "functionSelector": "6bfb0d01",
            "id": 21253,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "itemCount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1500:2:55"
            },
            "returnParameters": {
              "id": 21248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21247,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21253,
                  "src": "1524:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1524:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1523:9:55"
            },
            "scope": 21514,
            "src": "1482:97:55",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              22830
            ],
            "body": {
              "id": 21267,
              "nodeType": "Block",
              "src": "1858:62:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 21262,
                        "name": "items",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21233,
                        "src": "1876:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                          "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                        }
                      },
                      "id": 21264,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21263,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21256,
                        "src": "1882:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1876:20:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                        "typeString": "struct ContractRegistry.RegistryItem storage ref"
                      }
                    },
                    "id": 21265,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 21226,
                    "src": "1876:36:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 21261,
                  "id": 21266,
                  "nodeType": "Return",
                  "src": "1869:43:55"
                }
              ]
            },
            "documentation": {
              "id": 21254,
              "nodeType": "StructuredDocumentation",
              "src": "1587:184:55",
              "text": " @dev returns the address associated with the given contract name\n @param _contractName    contract name\n @return contract address"
            },
            "functionSelector": "bb34534c",
            "id": 21268,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addressOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 21258,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1831:8:55"
            },
            "parameters": {
              "id": 21257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21256,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21268,
                  "src": "1796:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21255,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1796:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1795:23:55"
            },
            "returnParameters": {
              "id": 21261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21260,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21268,
                  "src": "1849:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21259,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1849:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1848:9:55"
            },
            "scope": 21514,
            "src": "1777:143:55",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21337,
              "nodeType": "Block",
              "src": "2283:810:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 21285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21282,
                            "name": "_contractName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21271,
                            "src": "2329:13:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 21283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2329:20:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2352:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2329:24:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4e414d45",
                        "id": 21286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2355:18:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        },
                        "value": "ERR_INVALID_NAME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        }
                      ],
                      "id": 21281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2321:7:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2321:53:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21288,
                  "nodeType": "ExpressionStatement",
                  "src": "2321:53:55"
                },
                {
                  "assignments": [
                    21290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21290,
                      "mutability": "mutable",
                      "name": "currentAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21337,
                      "src": "2429:22:55",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21289,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2429:7:55",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21295,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 21291,
                        "name": "items",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21233,
                        "src": "2454:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                          "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                        }
                      },
                      "id": 21293,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21292,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21271,
                        "src": "2460:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2454:20:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                        "typeString": "struct ContractRegistry.RegistryItem storage ref"
                      }
                    },
                    "id": 21294,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 21226,
                    "src": "2454:36:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2429:61:55"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 21298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21296,
                      "name": "_contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21273,
                      "src": "2505:16:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 21297,
                      "name": "currentAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21290,
                      "src": "2525:14:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2505:34:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21300,
                  "nodeType": "IfStatement",
                  "src": "2501:60:55",
                  "trueBody": {
                    "expression": null,
                    "functionReturnParameters": 21280,
                    "id": 21299,
                    "nodeType": "Return",
                    "src": "2554:7:55"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 21306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21301,
                      "name": "currentAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21290,
                      "src": "2577:14:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2603:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 21303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2595:7:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 21302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2595:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 21305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2595:10:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2577:28:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21324,
                  "nodeType": "IfStatement",
                  "src": "2573:288:55",
                  "trueBody": {
                    "id": 21323,
                    "nodeType": "Block",
                    "src": "2607:254:55",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21307,
                                "name": "items",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21233,
                                "src": "2674:5:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                                  "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                                }
                              },
                              "id": 21309,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21308,
                                "name": "_contractName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21271,
                                "src": "2680:13:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2674:20:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                                "typeString": "struct ContractRegistry.RegistryItem storage ref"
                              }
                            },
                            "id": 21310,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nameIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21228,
                            "src": "2674:30:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21311,
                              "name": "contractNames",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21236,
                              "src": "2707:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 21312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2707:20:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2674:53:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21314,
                        "nodeType": "ExpressionStatement",
                        "src": "2674:53:55"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 21319,
                                  "name": "_contractName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21271,
                                  "src": "2834:13:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 21318,
                                "name": "bytes32ToString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21485,
                                "src": "2818:15:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (bytes32) pure returns (string memory)"
                                }
                              },
                              "id": 21320,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2818:30:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21315,
                              "name": "contractNames",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21236,
                              "src": "2799:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 21317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2799:18:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_string_storage_$returns$__$",
                              "typeString": "function (string storage ref)"
                            }
                          },
                          "id": 21321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2799:50:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21322,
                        "nodeType": "ExpressionStatement",
                        "src": "2799:50:55"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21325,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21233,
                          "src": "2920:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                            "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                          }
                        },
                        "id": 21327,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21326,
                          "name": "_contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21271,
                          "src": "2926:13:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2920:20:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                          "typeString": "struct ContractRegistry.RegistryItem storage ref"
                        }
                      },
                      "id": 21328,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21226,
                      "src": "2920:36:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21329,
                      "name": "_contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21273,
                      "src": "2959:16:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2920:55:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21331,
                  "nodeType": "ExpressionStatement",
                  "src": "2920:55:55"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21333,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21271,
                        "src": "3053:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21334,
                        "name": "_contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21273,
                        "src": "3068:16:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21332,
                      "name": "AddressUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21243,
                      "src": "3039:13:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 21335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3039:46:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21336,
                  "nodeType": "EmitStatement",
                  "src": "3034:51:55"
                }
              ]
            },
            "documentation": {
              "id": 21269,
              "nodeType": "StructuredDocumentation",
              "src": "1928:195:55",
              "text": " @dev registers a new address for the contract name in the registry\n @param _contractName     contract name\n @param _contractAddress  contract address"
            },
            "functionSelector": "662de379",
            "id": 21338,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21276,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21275,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "2228:9:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2228:9:55"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21278,
                    "name": "_contractAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21273,
                    "src": "2260:16:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 21279,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21277,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "2247:12:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2247:30:55"
              }
            ],
            "name": "registerAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21271,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21338,
                  "src": "2154:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21270,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2154:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21273,
                  "mutability": "mutable",
                  "name": "_contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21338,
                  "src": "2177:24:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2177:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2153:49:55"
            },
            "returnParameters": {
              "id": 21280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2283:0:55"
            },
            "scope": 21514,
            "src": "2129:964:55",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21443,
              "nodeType": "Block",
              "src": "3307:1327:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 21350,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21347,
                            "name": "_contractName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21341,
                            "src": "3353:13:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 21348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3353:20:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3376:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3353:24:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4e414d45",
                        "id": 21351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3379:18:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        },
                        "value": "ERR_INVALID_NAME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        }
                      ],
                      "id": 21346,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3345:7:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3345:53:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21353,
                  "nodeType": "ExpressionStatement",
                  "src": "3345:53:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21355,
                              "name": "items",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21233,
                              "src": "3417:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                                "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                              }
                            },
                            "id": 21357,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21356,
                              "name": "_contractName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21341,
                              "src": "3423:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3417:20:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                              "typeString": "struct ContractRegistry.RegistryItem storage ref"
                            }
                          },
                          "id": 21358,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21226,
                          "src": "3417:36:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 21361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3465:1:55",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 21360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3457:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 21359,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3457:7:55",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 21362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3457:10:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3417:50:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4e414d45",
                        "id": 21364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3469:18:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        },
                        "value": "ERR_INVALID_NAME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        }
                      ],
                      "id": 21354,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3409:7:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3409:79:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21366,
                  "nodeType": "ExpressionStatement",
                  "src": "3409:79:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21367,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21233,
                          "src": "3550:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                            "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                          }
                        },
                        "id": 21369,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21368,
                          "name": "_contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21341,
                          "src": "3556:13:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3550:20:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                          "typeString": "struct ContractRegistry.RegistryItem storage ref"
                        }
                      },
                      "id": 21370,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21226,
                      "src": "3550:36:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3597:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 21372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3589:7:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 21371,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3589:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 21374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3589:10:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3550:49:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21376,
                  "nodeType": "ExpressionStatement",
                  "src": "3550:49:55"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21377,
                        "name": "contractNames",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "3862:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                          "typeString": "string storage ref[] storage ref"
                        }
                      },
                      "id": 21378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3862:20:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 21379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3885:1:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "3862:24:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21422,
                  "nodeType": "IfStatement",
                  "src": "3858:488:55",
                  "trueBody": {
                    "id": 21421,
                    "nodeType": "Block",
                    "src": "3888:458:55",
                    "statements": [
                      {
                        "assignments": [
                          21382
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21382,
                            "mutability": "mutable",
                            "name": "lastContractNameString",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "3903:36:55",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 21381,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3903:6:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21389,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21383,
                            "name": "contractNames",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21236,
                            "src": "3942:13:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 21388,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 21387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21384,
                                "name": "contractNames",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21236,
                                "src": "3956:13:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                  "typeString": "string storage ref[] storage ref"
                                }
                              },
                              "id": 21385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3956:20:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 21386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3979:1:55",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "3956:24:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3942:39:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3903:78:55"
                      },
                      {
                        "assignments": [
                          21391
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21391,
                            "mutability": "mutable",
                            "name": "unregisterIndex",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "3996:23:55",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 21390,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3996:7:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21396,
                        "initialValue": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21392,
                              "name": "items",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21233,
                              "src": "4022:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                                "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                              }
                            },
                            "id": 21394,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21393,
                              "name": "_contractName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21341,
                              "src": "4028:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4022:20:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                              "typeString": "struct ContractRegistry.RegistryItem storage ref"
                            }
                          },
                          "id": 21395,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nameIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21228,
                          "src": "4022:30:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3996:56:55"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21397,
                              "name": "contractNames",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21236,
                              "src": "4069:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 21399,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21398,
                              "name": "unregisterIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21391,
                              "src": "4083:15:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4069:30:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 21400,
                            "name": "lastContractNameString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21382,
                            "src": "4102:22:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "4069:55:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 21402,
                        "nodeType": "ExpressionStatement",
                        "src": "4069:55:55"
                      },
                      {
                        "assignments": [
                          21404
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21404,
                            "mutability": "mutable",
                            "name": "lastContractName",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "4139:24:55",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 21403,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "4139:7:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21408,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21406,
                              "name": "lastContractNameString",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21382,
                              "src": "4182:22:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 21405,
                            "name": "stringToBytes32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21500,
                            "src": "4166:15:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 21407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4166:39:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4139:66:55"
                      },
                      {
                        "assignments": [
                          21410
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21410,
                            "mutability": "mutable",
                            "name": "registryItem",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "4220:33:55",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                              "typeString": "struct ContractRegistry.RegistryItem"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 21409,
                              "name": "RegistryItem",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 21229,
                              "src": "4220:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                                "typeString": "struct ContractRegistry.RegistryItem"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21414,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21411,
                            "name": "items",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21233,
                            "src": "4256:5:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                              "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                            }
                          },
                          "id": 21413,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21412,
                            "name": "lastContractName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21404,
                            "src": "4262:16:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4256:23:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                            "typeString": "struct ContractRegistry.RegistryItem storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4220:59:55"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21415,
                              "name": "registryItem",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21410,
                              "src": "4294:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                                "typeString": "struct ContractRegistry.RegistryItem storage pointer"
                              }
                            },
                            "id": 21417,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nameIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21228,
                            "src": "4294:22:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 21418,
                            "name": "unregisterIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21391,
                            "src": "4319:15:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4294:40:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21420,
                        "nodeType": "ExpressionStatement",
                        "src": "4294:40:55"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 21423,
                        "name": "contractNames",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "4413:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                          "typeString": "string storage ref[] storage ref"
                        }
                      },
                      "id": 21425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pop",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4413:17:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 21426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4413:19:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21427,
                  "nodeType": "ExpressionStatement",
                  "src": "4413:19:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21428,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21233,
                          "src": "4488:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                            "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                          }
                        },
                        "id": 21430,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21429,
                          "name": "_contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21341,
                          "src": "4494:13:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4488:20:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                          "typeString": "struct ContractRegistry.RegistryItem storage ref"
                        }
                      },
                      "id": 21431,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "nameIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21228,
                      "src": "4488:30:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21432,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4521:1:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4488:34:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21434,
                  "nodeType": "ExpressionStatement",
                  "src": "4488:34:55"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21436,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21341,
                        "src": "4600:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4623:1:55",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 21438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4615:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 21437,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4615:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 21440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4615:10:55",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 21435,
                      "name": "AddressUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21243,
                      "src": "4586:13:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 21441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4586:40:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21442,
                  "nodeType": "EmitStatement",
                  "src": "4581:45:55"
                }
              ]
            },
            "documentation": {
              "id": 21339,
              "nodeType": "StructuredDocumentation",
              "src": "3101:133:55",
              "text": " @dev removes an existing contract address from the registry\n @param _contractName contract name"
            },
            "functionSelector": "2bbd9530",
            "id": 21444,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21344,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21343,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "3297:9:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3297:9:55"
              }
            ],
            "name": "unregisterAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21341,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21444,
                  "src": "3267:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21340,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3267:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3266:23:55"
            },
            "returnParameters": {
              "id": 21345,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3307:0:55"
            },
            "scope": 21514,
            "src": "3240:1394:55",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21484,
              "nodeType": "Block",
              "src": "4950:188:55",
              "statements": [
                {
                  "assignments": [
                    21453
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21453,
                      "mutability": "mutable",
                      "name": "byteArray",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21484,
                      "src": "4961:22:55",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 21452,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4961:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21458,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 21456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4996:2:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "id": 21455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4986:9:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 21454,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4990:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 21457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4986:13:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4961:38:55"
                },
                {
                  "body": {
                    "id": 21477,
                    "nodeType": "Block",
                    "src": "5043:51:55",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21469,
                              "name": "byteArray",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21453,
                              "src": "5058:9:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 21471,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21470,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21460,
                              "src": "5068:1:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5058:12:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21472,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21447,
                              "src": "5073:6:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 21474,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21473,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21460,
                              "src": "5080:1:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5073:9:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "5058:24:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 21476,
                        "nodeType": "ExpressionStatement",
                        "src": "5058:24:55"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21463,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21460,
                      "src": "5030:1:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 21464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5034:2:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "5030:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21478,
                  "initializationExpression": {
                    "assignments": [
                      21460
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21460,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 21478,
                        "src": "5015:9:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21459,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5015:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21462,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5027:1:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5015:13:55"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5038:3:55",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21466,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21460,
                        "src": "5038:1:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21468,
                    "nodeType": "ExpressionStatement",
                    "src": "5038:3:55"
                  },
                  "nodeType": "ForStatement",
                  "src": "5010:84:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21481,
                        "name": "byteArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21453,
                        "src": "5120:9:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 21480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5113:6:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 21479,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5113:6:55",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5113:17:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 21451,
                  "id": 21483,
                  "nodeType": "Return",
                  "src": "5106:24:55"
                }
              ]
            },
            "documentation": {
              "id": 21445,
              "nodeType": "StructuredDocumentation",
              "src": "4642:224:55",
              "text": " @dev utility, converts bytes32 to a string\n note that the bytes32 argument is assumed to be UTF8 encoded ASCII string\n @return string representation of the given bytes32 argument"
            },
            "id": 21485,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bytes32ToString",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21447,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21485,
                  "src": "4897:14:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21446,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4897:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4896:16:55"
            },
            "returnParameters": {
              "id": 21451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21450,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21485,
                  "src": "4935:13:55",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21449,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4935:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4934:15:55"
            },
            "scope": 21514,
            "src": "4872:266:55",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21499,
              "nodeType": "Block",
              "src": "5453:134:55",
              "statements": [
                {
                  "assignments": [
                    21494
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21494,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21499,
                      "src": "5464:14:55",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 21493,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5464:7:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21495,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5464:14:55"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5498:58:55",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5513:32:55",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "5533:7:55"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5541:2:55",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5529:3:55"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5529:15:55"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5523:5:55"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5523:22:55"
                        },
                        "variableNames": [
                          {
                            "name": "result",
                            "nodeType": "YulIdentifier",
                            "src": "5513:6:55"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 21488,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5533:7:55",
                      "valueSize": 1
                    },
                    {
                      "declaration": 21494,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5513:6:55",
                      "valueSize": 1
                    }
                  ],
                  "id": 21496,
                  "nodeType": "InlineAssembly",
                  "src": "5489:67:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21497,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21494,
                    "src": "5573:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 21492,
                  "id": 21498,
                  "nodeType": "Return",
                  "src": "5566:13:55"
                }
              ]
            },
            "documentation": {
              "id": 21486,
              "nodeType": "StructuredDocumentation",
              "src": "5146:222:55",
              "text": " @dev utility, converts string to bytes32\n note that the bytes32 argument is assumed to be UTF8 encoded ASCII string\n @return string representation of the given bytes32 argument"
            },
            "id": 21500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stringToBytes32",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21488,
                  "mutability": "mutable",
                  "name": "_string",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21500,
                  "src": "5399:21:55",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5399:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5398:23:55"
            },
            "returnParameters": {
              "id": 21492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21491,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21500,
                  "src": "5444:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21490,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5444:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5443:9:55"
            },
            "scope": 21514,
            "src": "5374:213:55",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21512,
              "nodeType": "Block",
              "src": "5734:50:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21509,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21503,
                        "src": "5762:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 21508,
                      "name": "addressOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21268,
                      "src": "5752:9:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 21510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5752:24:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 21507,
                  "id": 21511,
                  "nodeType": "Return",
                  "src": "5745:31:55"
                }
              ]
            },
            "documentation": {
              "id": 21501,
              "nodeType": "StructuredDocumentation",
              "src": "5595:60:55",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "21f8a721",
            "id": 21513,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21503,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21513,
                  "src": "5681:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21502,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5681:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5680:23:55"
            },
            "returnParameters": {
              "id": 21507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21506,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21513,
                  "src": "5725:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5725:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5724:9:55"
            },
            "scope": 21514,
            "src": "5661:123:55",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 21515,
        "src": "633:5154:55"
      }
    ],
    "src": "52:5737:55"
  },
  "legacyAST": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistry.sol",
    "exportedSymbols": {
      "ContractRegistry": [
        21514
      ]
    },
    "id": 21515,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21214,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:55"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol",
        "file": "./Owned.sol",
        "id": 21215,
        "nodeType": "ImportDirective",
        "scope": 21515,
        "sourceUnit": 21819,
        "src": "77:21:55",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol",
        "file": "./Utils.sol",
        "id": 21216,
        "nodeType": "ImportDirective",
        "scope": 21515,
        "sourceUnit": 22662,
        "src": "100:21:55",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol",
        "file": "./interfaces/IContractRegistry.sol",
        "id": 21217,
        "nodeType": "ImportDirective",
        "scope": 21515,
        "sourceUnit": 22832,
        "src": "123:44:55",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21219,
              "name": "IContractRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22831,
              "src": "662:17:55",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                "typeString": "contract IContractRegistry"
              }
            },
            "id": 21220,
            "nodeType": "InheritanceSpecifier",
            "src": "662:17:55"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21221,
              "name": "Owned",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21818,
              "src": "681:5:55",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Owned_$21818",
                "typeString": "contract Owned"
              }
            },
            "id": 21222,
            "nodeType": "InheritanceSpecifier",
            "src": "681:5:55"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21223,
              "name": "Utils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22661,
              "src": "688:5:55",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Utils_$22661",
                "typeString": "contract Utils"
              }
            },
            "id": 21224,
            "nodeType": "InheritanceSpecifier",
            "src": "688:5:55"
          }
        ],
        "contractDependencies": [
          21818,
          22661,
          22831,
          22847
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21218,
          "nodeType": "StructuredDocumentation",
          "src": "171:460:55",
          "text": " @dev Contract Registry\n The contract registry keeps contract addresses by name.\n The owner can update contract addresses so that a contract name always points to the latest version\n of the given contract.\n Other contracts can query the registry to get updated addresses instead of depending on specific\n addresses.\n Note that contract names are limited to 32 bytes UTF8 encoded ASCII strings to optimize gas costs"
        },
        "fullyImplemented": true,
        "id": 21514,
        "linearizedBaseContracts": [
          21514,
          22661,
          21818,
          22847,
          22831
        ],
        "name": "ContractRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ContractRegistry.RegistryItem",
            "id": 21229,
            "members": [
              {
                "constant": false,
                "id": 21226,
                "mutability": "mutable",
                "name": "contractAddress",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 21229,
                "src": "732:23:55",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 21225,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "732:7:55",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 21228,
                "mutability": "mutable",
                "name": "nameIndex",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 21229,
                "src": "789:17:55",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 21227,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "789:7:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RegistryItem",
            "nodeType": "StructDefinition",
            "scope": 21514,
            "src": "701:173:55",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 21233,
            "mutability": "mutable",
            "name": "items",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21514,
            "src": "882:47:55",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
              "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem)"
            },
            "typeName": {
              "id": 21232,
              "keyType": {
                "id": 21230,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "891:7:55",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "882:33:55",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem)"
              },
              "valueType": {
                "contractScope": null,
                "id": 21231,
                "name": "RegistryItem",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21229,
                "src": "902:12:55",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                  "typeString": "struct ContractRegistry.RegistryItem"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "3ca6bb92",
            "id": 21236,
            "mutability": "mutable",
            "name": "contractNames",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21514,
            "src": "971:29:55",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
              "typeString": "string[]"
            },
            "typeName": {
              "baseType": {
                "id": 21234,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "971:6:55",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "id": 21235,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "971:8:55",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                "typeString": "string[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 21237,
              "nodeType": "StructuredDocumentation",
              "src": "1071:203:55",
              "text": " @dev triggered when an address pointed to by a contract name is modified\n @param _contractName    contract name\n @param _contractAddress new contract address"
            },
            "id": 21243,
            "name": "AddressUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 21242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21239,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21243,
                  "src": "1300:29:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21238,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1300:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21241,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21243,
                  "src": "1331:24:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1331:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1299:57:55"
            },
            "src": "1280:77:55"
          },
          {
            "body": {
              "id": 21252,
              "nodeType": "Block",
              "src": "1533:46:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 21249,
                      "name": "contractNames",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21236,
                      "src": "1551:13:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                        "typeString": "string storage ref[] storage ref"
                      }
                    },
                    "id": 21250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1551:20:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 21248,
                  "id": 21251,
                  "nodeType": "Return",
                  "src": "1544:27:55"
                }
              ]
            },
            "documentation": {
              "id": 21244,
              "nodeType": "StructuredDocumentation",
              "src": "1365:111:55",
              "text": " @dev returns the number of items in the registry\n @return number of items"
            },
            "functionSelector": "6bfb0d01",
            "id": 21253,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "itemCount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1500:2:55"
            },
            "returnParameters": {
              "id": 21248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21247,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21253,
                  "src": "1524:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1524:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1523:9:55"
            },
            "scope": 21514,
            "src": "1482:97:55",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              22830
            ],
            "body": {
              "id": 21267,
              "nodeType": "Block",
              "src": "1858:62:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 21262,
                        "name": "items",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21233,
                        "src": "1876:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                          "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                        }
                      },
                      "id": 21264,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21263,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21256,
                        "src": "1882:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1876:20:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                        "typeString": "struct ContractRegistry.RegistryItem storage ref"
                      }
                    },
                    "id": 21265,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 21226,
                    "src": "1876:36:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 21261,
                  "id": 21266,
                  "nodeType": "Return",
                  "src": "1869:43:55"
                }
              ]
            },
            "documentation": {
              "id": 21254,
              "nodeType": "StructuredDocumentation",
              "src": "1587:184:55",
              "text": " @dev returns the address associated with the given contract name\n @param _contractName    contract name\n @return contract address"
            },
            "functionSelector": "bb34534c",
            "id": 21268,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addressOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 21258,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1831:8:55"
            },
            "parameters": {
              "id": 21257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21256,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21268,
                  "src": "1796:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21255,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1796:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1795:23:55"
            },
            "returnParameters": {
              "id": 21261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21260,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21268,
                  "src": "1849:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21259,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1849:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1848:9:55"
            },
            "scope": 21514,
            "src": "1777:143:55",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21337,
              "nodeType": "Block",
              "src": "2283:810:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 21285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21282,
                            "name": "_contractName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21271,
                            "src": "2329:13:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 21283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2329:20:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2352:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2329:24:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4e414d45",
                        "id": 21286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2355:18:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        },
                        "value": "ERR_INVALID_NAME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        }
                      ],
                      "id": 21281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2321:7:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2321:53:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21288,
                  "nodeType": "ExpressionStatement",
                  "src": "2321:53:55"
                },
                {
                  "assignments": [
                    21290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21290,
                      "mutability": "mutable",
                      "name": "currentAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21337,
                      "src": "2429:22:55",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 21289,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2429:7:55",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21295,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 21291,
                        "name": "items",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21233,
                        "src": "2454:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                          "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                        }
                      },
                      "id": 21293,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21292,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21271,
                        "src": "2460:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2454:20:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                        "typeString": "struct ContractRegistry.RegistryItem storage ref"
                      }
                    },
                    "id": 21294,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "contractAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 21226,
                    "src": "2454:36:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2429:61:55"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 21298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21296,
                      "name": "_contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21273,
                      "src": "2505:16:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 21297,
                      "name": "currentAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21290,
                      "src": "2525:14:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2505:34:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21300,
                  "nodeType": "IfStatement",
                  "src": "2501:60:55",
                  "trueBody": {
                    "expression": null,
                    "functionReturnParameters": 21280,
                    "id": 21299,
                    "nodeType": "Return",
                    "src": "2554:7:55"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 21306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21301,
                      "name": "currentAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21290,
                      "src": "2577:14:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2603:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 21303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2595:7:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 21302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2595:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 21305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2595:10:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2577:28:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21324,
                  "nodeType": "IfStatement",
                  "src": "2573:288:55",
                  "trueBody": {
                    "id": 21323,
                    "nodeType": "Block",
                    "src": "2607:254:55",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21307,
                                "name": "items",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21233,
                                "src": "2674:5:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                                  "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                                }
                              },
                              "id": 21309,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21308,
                                "name": "_contractName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21271,
                                "src": "2680:13:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2674:20:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                                "typeString": "struct ContractRegistry.RegistryItem storage ref"
                              }
                            },
                            "id": 21310,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nameIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21228,
                            "src": "2674:30:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21311,
                              "name": "contractNames",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21236,
                              "src": "2707:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 21312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2707:20:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2674:53:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21314,
                        "nodeType": "ExpressionStatement",
                        "src": "2674:53:55"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 21319,
                                  "name": "_contractName",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21271,
                                  "src": "2834:13:55",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 21318,
                                "name": "bytes32ToString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21485,
                                "src": "2818:15:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (bytes32) pure returns (string memory)"
                                }
                              },
                              "id": 21320,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2818:30:55",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21315,
                              "name": "contractNames",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21236,
                              "src": "2799:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 21317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2799:18:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_string_storage_$returns$__$",
                              "typeString": "function (string storage ref)"
                            }
                          },
                          "id": 21321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2799:50:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21322,
                        "nodeType": "ExpressionStatement",
                        "src": "2799:50:55"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21325,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21233,
                          "src": "2920:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                            "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                          }
                        },
                        "id": 21327,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21326,
                          "name": "_contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21271,
                          "src": "2926:13:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2920:20:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                          "typeString": "struct ContractRegistry.RegistryItem storage ref"
                        }
                      },
                      "id": 21328,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21226,
                      "src": "2920:36:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21329,
                      "name": "_contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21273,
                      "src": "2959:16:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2920:55:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21331,
                  "nodeType": "ExpressionStatement",
                  "src": "2920:55:55"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21333,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21271,
                        "src": "3053:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21334,
                        "name": "_contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21273,
                        "src": "3068:16:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21332,
                      "name": "AddressUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21243,
                      "src": "3039:13:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 21335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3039:46:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21336,
                  "nodeType": "EmitStatement",
                  "src": "3034:51:55"
                }
              ]
            },
            "documentation": {
              "id": 21269,
              "nodeType": "StructuredDocumentation",
              "src": "1928:195:55",
              "text": " @dev registers a new address for the contract name in the registry\n @param _contractName     contract name\n @param _contractAddress  contract address"
            },
            "functionSelector": "662de379",
            "id": 21338,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21276,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21275,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "2228:9:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2228:9:55"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21278,
                    "name": "_contractAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21273,
                    "src": "2260:16:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 21279,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21277,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "2247:12:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2247:30:55"
              }
            ],
            "name": "registerAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21271,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21338,
                  "src": "2154:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21270,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2154:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21273,
                  "mutability": "mutable",
                  "name": "_contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21338,
                  "src": "2177:24:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2177:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2153:49:55"
            },
            "returnParameters": {
              "id": 21280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2283:0:55"
            },
            "scope": 21514,
            "src": "2129:964:55",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21443,
              "nodeType": "Block",
              "src": "3307:1327:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 21350,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21347,
                            "name": "_contractName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21341,
                            "src": "3353:13:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 21348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3353:20:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3376:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3353:24:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4e414d45",
                        "id": 21351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3379:18:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        },
                        "value": "ERR_INVALID_NAME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        }
                      ],
                      "id": 21346,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3345:7:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3345:53:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21353,
                  "nodeType": "ExpressionStatement",
                  "src": "3345:53:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21355,
                              "name": "items",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21233,
                              "src": "3417:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                                "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                              }
                            },
                            "id": 21357,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21356,
                              "name": "_contractName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21341,
                              "src": "3423:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3417:20:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                              "typeString": "struct ContractRegistry.RegistryItem storage ref"
                            }
                          },
                          "id": 21358,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "contractAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21226,
                          "src": "3417:36:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 21361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3465:1:55",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 21360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3457:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 21359,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3457:7:55",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 21362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3457:10:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3417:50:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4e414d45",
                        "id": 21364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3469:18:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        },
                        "value": "ERR_INVALID_NAME"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c31b897cf1b4c41d9a3a2c9019700f5d8d0c36c906997985403c8f4610f8246",
                          "typeString": "literal_string \"ERR_INVALID_NAME\""
                        }
                      ],
                      "id": 21354,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3409:7:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3409:79:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21366,
                  "nodeType": "ExpressionStatement",
                  "src": "3409:79:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21367,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21233,
                          "src": "3550:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                            "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                          }
                        },
                        "id": 21369,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21368,
                          "name": "_contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21341,
                          "src": "3556:13:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3550:20:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                          "typeString": "struct ContractRegistry.RegistryItem storage ref"
                        }
                      },
                      "id": 21370,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21226,
                      "src": "3550:36:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3597:1:55",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 21372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3589:7:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 21371,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3589:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 21374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3589:10:55",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3550:49:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21376,
                  "nodeType": "ExpressionStatement",
                  "src": "3550:49:55"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21377,
                        "name": "contractNames",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "3862:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                          "typeString": "string storage ref[] storage ref"
                        }
                      },
                      "id": 21378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3862:20:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 21379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3885:1:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "3862:24:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21422,
                  "nodeType": "IfStatement",
                  "src": "3858:488:55",
                  "trueBody": {
                    "id": 21421,
                    "nodeType": "Block",
                    "src": "3888:458:55",
                    "statements": [
                      {
                        "assignments": [
                          21382
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21382,
                            "mutability": "mutable",
                            "name": "lastContractNameString",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "3903:36:55",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 21381,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3903:6:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21389,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21383,
                            "name": "contractNames",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21236,
                            "src": "3942:13:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 21388,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 21387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21384,
                                "name": "contractNames",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21236,
                                "src": "3956:13:55",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                  "typeString": "string storage ref[] storage ref"
                                }
                              },
                              "id": 21385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3956:20:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 21386,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3979:1:55",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "3956:24:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3942:39:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3903:78:55"
                      },
                      {
                        "assignments": [
                          21391
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21391,
                            "mutability": "mutable",
                            "name": "unregisterIndex",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "3996:23:55",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 21390,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3996:7:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21396,
                        "initialValue": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21392,
                              "name": "items",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21233,
                              "src": "4022:5:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                                "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                              }
                            },
                            "id": 21394,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21393,
                              "name": "_contractName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21341,
                              "src": "4028:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4022:20:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                              "typeString": "struct ContractRegistry.RegistryItem storage ref"
                            }
                          },
                          "id": 21395,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nameIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21228,
                          "src": "4022:30:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3996:56:55"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21397,
                              "name": "contractNames",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21236,
                              "src": "4069:13:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                                "typeString": "string storage ref[] storage ref"
                              }
                            },
                            "id": 21399,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21398,
                              "name": "unregisterIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21391,
                              "src": "4083:15:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4069:30:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 21400,
                            "name": "lastContractNameString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21382,
                            "src": "4102:22:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "4069:55:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 21402,
                        "nodeType": "ExpressionStatement",
                        "src": "4069:55:55"
                      },
                      {
                        "assignments": [
                          21404
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21404,
                            "mutability": "mutable",
                            "name": "lastContractName",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "4139:24:55",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 21403,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "4139:7:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21408,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21406,
                              "name": "lastContractNameString",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21382,
                              "src": "4182:22:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 21405,
                            "name": "stringToBytes32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21500,
                            "src": "4166:15:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (string memory) pure returns (bytes32)"
                            }
                          },
                          "id": 21407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4166:39:55",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4139:66:55"
                      },
                      {
                        "assignments": [
                          21410
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21410,
                            "mutability": "mutable",
                            "name": "registryItem",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 21421,
                            "src": "4220:33:55",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                              "typeString": "struct ContractRegistry.RegistryItem"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 21409,
                              "name": "RegistryItem",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 21229,
                              "src": "4220:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                                "typeString": "struct ContractRegistry.RegistryItem"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21414,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21411,
                            "name": "items",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21233,
                            "src": "4256:5:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                              "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                            }
                          },
                          "id": 21413,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21412,
                            "name": "lastContractName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21404,
                            "src": "4262:16:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4256:23:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                            "typeString": "struct ContractRegistry.RegistryItem storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4220:59:55"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21415,
                              "name": "registryItem",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21410,
                              "src": "4294:12:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RegistryItem_$21229_storage_ptr",
                                "typeString": "struct ContractRegistry.RegistryItem storage pointer"
                              }
                            },
                            "id": 21417,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "nameIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21228,
                            "src": "4294:22:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 21418,
                            "name": "unregisterIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21391,
                            "src": "4319:15:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4294:40:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21420,
                        "nodeType": "ExpressionStatement",
                        "src": "4294:40:55"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 21423,
                        "name": "contractNames",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21236,
                        "src": "4413:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                          "typeString": "string storage ref[] storage ref"
                        }
                      },
                      "id": 21425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pop",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4413:17:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 21426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4413:19:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21427,
                  "nodeType": "ExpressionStatement",
                  "src": "4413:19:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21428,
                          "name": "items",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21233,
                          "src": "4488:5:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RegistryItem_$21229_storage_$",
                            "typeString": "mapping(bytes32 => struct ContractRegistry.RegistryItem storage ref)"
                          }
                        },
                        "id": 21430,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21429,
                          "name": "_contractName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21341,
                          "src": "4494:13:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4488:20:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RegistryItem_$21229_storage",
                          "typeString": "struct ContractRegistry.RegistryItem storage ref"
                        }
                      },
                      "id": 21431,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "nameIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21228,
                      "src": "4488:30:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21432,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4521:1:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4488:34:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21434,
                  "nodeType": "ExpressionStatement",
                  "src": "4488:34:55"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21436,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21341,
                        "src": "4600:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4623:1:55",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 21438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4615:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 21437,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4615:7:55",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 21440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4615:10:55",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 21435,
                      "name": "AddressUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21243,
                      "src": "4586:13:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 21441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4586:40:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21442,
                  "nodeType": "EmitStatement",
                  "src": "4581:45:55"
                }
              ]
            },
            "documentation": {
              "id": 21339,
              "nodeType": "StructuredDocumentation",
              "src": "3101:133:55",
              "text": " @dev removes an existing contract address from the registry\n @param _contractName contract name"
            },
            "functionSelector": "2bbd9530",
            "id": 21444,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21344,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21343,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "3297:9:55",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3297:9:55"
              }
            ],
            "name": "unregisterAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21341,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21444,
                  "src": "3267:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21340,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3267:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3266:23:55"
            },
            "returnParameters": {
              "id": 21345,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3307:0:55"
            },
            "scope": 21514,
            "src": "3240:1394:55",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21484,
              "nodeType": "Block",
              "src": "4950:188:55",
              "statements": [
                {
                  "assignments": [
                    21453
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21453,
                      "mutability": "mutable",
                      "name": "byteArray",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21484,
                      "src": "4961:22:55",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 21452,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4961:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21458,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 21456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4996:2:55",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "id": 21455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4986:9:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 21454,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4990:5:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 21457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4986:13:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4961:38:55"
                },
                {
                  "body": {
                    "id": 21477,
                    "nodeType": "Block",
                    "src": "5043:51:55",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21469,
                              "name": "byteArray",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21453,
                              "src": "5058:9:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 21471,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21470,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21460,
                              "src": "5068:1:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5058:12:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21472,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21447,
                              "src": "5073:6:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 21474,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21473,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21460,
                              "src": "5080:1:55",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5073:9:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "5058:24:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 21476,
                        "nodeType": "ExpressionStatement",
                        "src": "5058:24:55"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21463,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21460,
                      "src": "5030:1:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 21464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5034:2:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "5030:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21478,
                  "initializationExpression": {
                    "assignments": [
                      21460
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21460,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 21478,
                        "src": "5015:9:55",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21459,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5015:7:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21462,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5027:1:55",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5015:13:55"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5038:3:55",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21466,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21460,
                        "src": "5038:1:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21468,
                    "nodeType": "ExpressionStatement",
                    "src": "5038:3:55"
                  },
                  "nodeType": "ForStatement",
                  "src": "5010:84:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21481,
                        "name": "byteArray",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21453,
                        "src": "5120:9:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 21480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5113:6:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 21479,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5113:6:55",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5113:17:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 21451,
                  "id": 21483,
                  "nodeType": "Return",
                  "src": "5106:24:55"
                }
              ]
            },
            "documentation": {
              "id": 21445,
              "nodeType": "StructuredDocumentation",
              "src": "4642:224:55",
              "text": " @dev utility, converts bytes32 to a string\n note that the bytes32 argument is assumed to be UTF8 encoded ASCII string\n @return string representation of the given bytes32 argument"
            },
            "id": 21485,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bytes32ToString",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21447,
                  "mutability": "mutable",
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21485,
                  "src": "4897:14:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21446,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4897:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4896:16:55"
            },
            "returnParameters": {
              "id": 21451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21450,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21485,
                  "src": "4935:13:55",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21449,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4935:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4934:15:55"
            },
            "scope": 21514,
            "src": "4872:266:55",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21499,
              "nodeType": "Block",
              "src": "5453:134:55",
              "statements": [
                {
                  "assignments": [
                    21494
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21494,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21499,
                      "src": "5464:14:55",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 21493,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5464:7:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21495,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5464:14:55"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5498:58:55",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5513:32:55",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "5533:7:55"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5541:2:55",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5529:3:55"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5529:15:55"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5523:5:55"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5523:22:55"
                        },
                        "variableNames": [
                          {
                            "name": "result",
                            "nodeType": "YulIdentifier",
                            "src": "5513:6:55"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 21488,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5533:7:55",
                      "valueSize": 1
                    },
                    {
                      "declaration": 21494,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5513:6:55",
                      "valueSize": 1
                    }
                  ],
                  "id": 21496,
                  "nodeType": "InlineAssembly",
                  "src": "5489:67:55"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21497,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21494,
                    "src": "5573:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 21492,
                  "id": 21498,
                  "nodeType": "Return",
                  "src": "5566:13:55"
                }
              ]
            },
            "documentation": {
              "id": 21486,
              "nodeType": "StructuredDocumentation",
              "src": "5146:222:55",
              "text": " @dev utility, converts string to bytes32\n note that the bytes32 argument is assumed to be UTF8 encoded ASCII string\n @return string representation of the given bytes32 argument"
            },
            "id": 21500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stringToBytes32",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21488,
                  "mutability": "mutable",
                  "name": "_string",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21500,
                  "src": "5399:21:55",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5399:6:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5398:23:55"
            },
            "returnParameters": {
              "id": 21492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21491,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21500,
                  "src": "5444:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21490,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5444:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5443:9:55"
            },
            "scope": 21514,
            "src": "5374:213:55",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 21512,
              "nodeType": "Block",
              "src": "5734:50:55",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21509,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21503,
                        "src": "5762:13:55",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 21508,
                      "name": "addressOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21268,
                      "src": "5752:9:55",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 21510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5752:24:55",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 21507,
                  "id": 21511,
                  "nodeType": "Return",
                  "src": "5745:31:55"
                }
              ]
            },
            "documentation": {
              "id": 21501,
              "nodeType": "StructuredDocumentation",
              "src": "5595:60:55",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "21f8a721",
            "id": 21513,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21503,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21513,
                  "src": "5681:21:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21502,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5681:7:55",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5680:23:55"
            },
            "returnParameters": {
              "id": 21507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21506,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21513,
                  "src": "5725:7:55",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5725:7:55",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5724:9:55"
            },
            "scope": 21514,
            "src": "5661:123:55",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 21515,
        "src": "633:5154:55"
      }
    ],
    "src": "52:5737:55"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {
    "42": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xb708175e3f6Cd850643aAF7B32212AFad50e2549",
      "transactionHash": "0x7bfc81b1fc45e33d018be4e91281ebc6bc7a4ac8a9b497afcc752f5630e2261c"
    },
    "8995": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xb708175e3f6Cd850643aAF7B32212AFad50e2549",
      "transactionHash": "0x7bfc81b1fc45e33d018be4e91281ebc6bc7a4ac8a9b497afcc752f5630e2261c"
    },
    "1604964387852": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xc02Bb59ae88eb23a23BadC0B9E5206Dcdc88C02f",
      "transactionHash": "0xdbff2a9f16cb2962b0c8c078daa2bcad8b67e4995d1fc9dd5f09648a0dabfd4b"
    },
    "1604964469407": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x4d0C2eA383F8dDbfAFea0FB92c3fE49BdE5d9725",
      "transactionHash": "0x86bd2cd8b9b3d3cc5c3766e9e7724d3b6adf84d8e0e48a85c22fb9e8181c9cd4"
    },
    "1604965528035": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xba5D674F1bF01d7125a840220B0A86a5D7556705",
      "transactionHash": "0xdcd69e9e046456adeb407f3dedfb8bcfe1961703f4fa3c020a492ffb3c2647a9"
    },
    "1604965645554": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x2DE84749B53AA2237994AF994f22efaE23Bf59d9",
      "transactionHash": "0x4573c86c34cd809a0128f51e100e3691d1f28e0f8be050cca73536ed65b4fb79"
    },
    "1604965679541": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xbb43041Ae115e5f0362E807Cb42C44a4ce61F5d3",
      "transactionHash": "0x1f993195a776168143b5cb56e533e3305f2b918487a279c77aa4514f9202c46d"
    },
    "1604965719492": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xd52Fb83Cf4f03b8D844F29E1C6F795ca0AA58fEC",
      "transactionHash": "0xc317e282d0029b1d40b173ac4649df78ad4a520665808d23e490f3ee5f0d7c1c"
    },
    "1604965760834": {
      "events": {
        "0xfc08d1253c81bcd5444fc7056ef1f5a5df4c9220b6fd70d7449267f1f0f29918": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_contractName",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_contractAddress",
              "type": "address"
            }
          ],
          "name": "AddressUpdate",
          "type": "event"
        },
        "0x343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "_prevOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_newOwner",
              "type": "address"
            }
          ],
          "name": "OwnerUpdate",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xd316Dd5DA5F7C63D2173a392caB18973813daF13",
      "transactionHash": "0x20d414c1f386f14abd52d0e8d495cc65b4469b31bd7b10b0f64b0e0cda0b389b"
    }
  },
  "schemaVersion": "3.2.3",
  "updatedAt": "2020-11-10T14:20:44.715Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "Contract Registry The contract registry keeps contract addresses by name. The owner can update contract addresses so that a contract name always points to the latest version of the given contract. Other contracts can query the registry to get updated addresses instead of depending on specific addresses. Note that contract names are limited to 32 bytes UTF8 encoded ASCII strings to optimize gas costs",
    "events": {
      "AddressUpdate(bytes32,address)": {
        "details": "triggered when an address pointed to by a contract name is modified",
        "params": {
          "_contractAddress": "new contract address",
          "_contractName": "contract name"
        }
      }
    },
    "kind": "dev",
    "methods": {
      "acceptOwnership()": {
        "details": "used by a new owner to accept an ownership transfer"
      },
      "addressOf(bytes32)": {
        "details": "returns the address associated with the given contract name",
        "params": {
          "_contractName": "contract name"
        },
        "returns": {
          "_0": "contract address"
        }
      },
      "getAddress(bytes32)": {
        "details": "deprecated, backward compatibility"
      },
      "itemCount()": {
        "details": "returns the number of items in the registry",
        "returns": {
          "_0": "number of items"
        }
      },
      "registerAddress(bytes32,address)": {
        "details": "registers a new address for the contract name in the registry",
        "params": {
          "_contractAddress": "contract address",
          "_contractName": "contract name"
        }
      },
      "transferOwnership(address)": {
        "details": "allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner",
        "params": {
          "_newOwner": "new contract owner"
        }
      },
      "unregisterAddress(bytes32)": {
        "details": "removes an existing contract address from the registry",
        "params": {
          "_contractName": "contract name"
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}