{
  "contractName": "IIdentityRegistry",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimTopicsRegistry",
          "type": "address"
        }
      ],
      "name": "ClaimTopicsRegistrySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investorAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "country",
          "type": "uint16"
        }
      ],
      "name": "CountryUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investorAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "identity",
          "type": "address"
        }
      ],
      "name": "IdentityRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investorAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "identity",
          "type": "address"
        }
      ],
      "name": "IdentityRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "identityStorage",
          "type": "address"
        }
      ],
      "name": "IdentityStorageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "oldIdentity",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IIdentity",
          "name": "newIdentity",
          "type": "address"
        }
      ],
      "name": "IdentityUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trustedIssuersRegistry",
          "type": "address"
        }
      ],
      "name": "TrustedIssuersRegistrySet",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_identity",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_country",
          "type": "uint16"
        }
      ],
      "name": "registerIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "deleteIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_identityRegistryStorage",
          "type": "address"
        }
      ],
      "name": "setIdentityRegistryStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_claimTopicsRegistry",
          "type": "address"
        }
      ],
      "name": "setClaimTopicsRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_trustedIssuersRegistry",
          "type": "address"
        }
      ],
      "name": "setTrustedIssuersRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_country",
          "type": "uint16"
        }
      ],
      "name": "updateCountry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "contract IIdentity",
          "name": "_identity",
          "type": "address"
        }
      ],
      "name": "updateIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "contract IIdentity[]",
          "name": "_identities",
          "type": "address[]"
        },
        {
          "internalType": "uint16[]",
          "name": "_countries",
          "type": "uint16[]"
        }
      ],
      "name": "batchRegisterIdentity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "contains",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "isVerified",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "identity",
      "outputs": [
        {
          "internalType": "contract IIdentity",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "investorCountry",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "identityStorage",
      "outputs": [
        {
          "internalType": "contract IIdentityRegistryStorage",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "issuersRegistry",
      "outputs": [
        {
          "internalType": "contract ITrustedIssuersRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "topicsRegistry",
      "outputs": [
        {
          "internalType": "contract IClaimTopicsRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnershipOnIdentityRegistryContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgentOnIdentityRegistryContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgentOnIdentityRegistryContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimTopicsRegistry\",\"type\":\"address\"}],\"name\":\"ClaimTopicsRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"investorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"country\",\"type\":\"uint16\"}],\"name\":\"CountryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"investorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"identity\",\"type\":\"address\"}],\"name\":\"IdentityRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"investorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"identity\",\"type\":\"address\"}],\"name\":\"IdentityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"identityStorage\",\"type\":\"address\"}],\"name\":\"IdentityStorageSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"oldIdentity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IIdentity\",\"name\":\"newIdentity\",\"type\":\"address\"}],\"name\":\"IdentityUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"trustedIssuersRegistry\",\"type\":\"address\"}],\"name\":\"TrustedIssuersRegistrySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgentOnIdentityRegistryContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"contract IIdentity[]\",\"name\":\"_identities\",\"type\":\"address[]\"},{\"internalType\":\"uint16[]\",\"name\":\"_countries\",\"type\":\"uint16[]\"}],\"name\":\"batchRegisterIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"contains\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"deleteIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"identity\",\"outputs\":[{\"internalType\":\"contract IIdentity\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityStorage\",\"outputs\":[{\"internalType\":\"contract IIdentityRegistryStorage\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"investorCountry\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"isVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"issuersRegistry\",\"outputs\":[{\"internalType\":\"contract ITrustedIssuersRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_identity\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_country\",\"type\":\"uint16\"}],\"name\":\"registerIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgentOnIdentityRegistryContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_claimTopicsRegistry\",\"type\":\"address\"}],\"name\":\"setClaimTopicsRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_identityRegistryStorage\",\"type\":\"address\"}],\"name\":\"setIdentityRegistryStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_trustedIssuersRegistry\",\"type\":\"address\"}],\"name\":\"setTrustedIssuersRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"topicsRegistry\",\"outputs\":[{\"internalType\":\"contract IClaimTopicsRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershipOnIdentityRegistryContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"_country\",\"type\":\"uint16\"}],\"name\":\"updateCountry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"contract IIdentity\",\"name\":\"_identity\",\"type\":\"address\"}],\"name\":\"updateIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addAgentOnIdentityRegistryContract(address)\":{\"params\":{\"_agent\":\"The _agent's address to add.\"}},\"batchRegisterIdentity(address[],address[],uint16[])\":{\"details\":\"function allowing to register identities in batch  This function can only be called by a wallet set as agent of the smart contract  Requires that none of the users has an identity contract already registered.  IMPORTANT : THIS TRANSACTION COULD EXCEED GAS LIMIT IF `_userAddresses.length` IS TOO HIGH,  USE WITH CARE OR YOU COULD LOSE TX FEES WITH AN \\\"OUT OF GAS\\\" TRANSACTION\",\"params\":{\"_countries\":\"The countries of the corresponding investors  emits _userAddresses.length `IdentityRegistered` events\",\"_identities\":\"The addresses of the corresponding identity contracts\",\"_userAddresses\":\"The addresses of the users\"}},\"contains(address)\":{\"details\":\"This functions checks whether a wallet has its Identity registered or not  in the Identity Registry.\",\"params\":{\"_userAddress\":\"The address of the user to be checked.\"},\"returns\":{\"_0\":\"'True' if the address is contained in the Identity Registry, 'false' if not.\"}},\"deleteIdentity(address)\":{\"details\":\"Removes an user from the identity registry.  Requires that the user have an identity contract already deployed that will be deleted.  This function can only be called by a wallet set as agent of the smart contract\",\"params\":{\"_userAddress\":\"The address of the user to be removed  emits `IdentityRemoved` event\"}},\"identity(address)\":{\"details\":\"Returns the onchainID of an investor.\",\"params\":{\"_userAddress\":\"The wallet of the investor\"}},\"identityStorage()\":{\"details\":\"Returns the IdentityRegistryStorage linked to the current IdentityRegistry.\"},\"investorCountry(address)\":{\"details\":\"Returns the country code of an investor.\",\"params\":{\"_userAddress\":\"The wallet of the investor\"}},\"isVerified(address)\":{\"details\":\"This functions checks whether an identity contract  corresponding to the provided user address has the required claims or not based  on the data fetched from trusted issuers registry and from the claim topics registry\",\"params\":{\"_userAddress\":\"The address of the user to be verified.\"},\"returns\":{\"_0\":\"'True' if the address is verified, 'false' if not.\"}},\"issuersRegistry()\":{\"details\":\"Returns the TrustedIssuersRegistry linked to the current IdentityRegistry.\"},\"registerIdentity(address,address,uint16)\":{\"details\":\"Register an identity contract corresponding to a user address.  Requires that the user doesn't have an identity contract already registered.  This function can only be called by a wallet set as agent of the smart contract\",\"params\":{\"_country\":\"The country of the investor  emits `IdentityRegistered` event\",\"_identity\":\"The address of the user's identity contract\",\"_userAddress\":\"The address of the user\"}},\"removeAgentOnIdentityRegistryContract(address)\":{\"params\":{\"_agent\":\"The _agent's address to remove.\"}},\"setClaimTopicsRegistry(address)\":{\"details\":\"Replace the actual claimTopicsRegistry contract with a new one.  This function can only be called by the wallet set as owner of the smart contract\",\"params\":{\"_claimTopicsRegistry\":\"The address of the new claim Topics Registry  emits `ClaimTopicsRegistrySet` event\"}},\"setIdentityRegistryStorage(address)\":{\"details\":\"Replace the actual identityRegistryStorage contract with a new one.  This function can only be called by the wallet set as owner of the smart contract\",\"params\":{\"_identityRegistryStorage\":\"The address of the new Identity Registry Storage  emits `IdentityStorageSet` event\"}},\"setTrustedIssuersRegistry(address)\":{\"details\":\"Replace the actual trustedIssuersRegistry contract with a new one.  This function can only be called by the wallet set as owner of the smart contract\",\"params\":{\"_trustedIssuersRegistry\":\"The address of the new Trusted Issuers Registry  emits `TrustedIssuersRegistrySet` event\"}},\"topicsRegistry()\":{\"details\":\"Returns the ClaimTopicsRegistry linked to the current IdentityRegistry.\"},\"transferOwnershipOnIdentityRegistryContract(address)\":{\"params\":{\"_newOwner\":\"The new owner of this contract.\"}},\"updateCountry(address,uint16)\":{\"details\":\"Updates the country corresponding to a user address.  Requires that the user should have an identity contract already deployed that will be replaced.  This function can only be called by a wallet set as agent of the smart contract\",\"params\":{\"_country\":\"The new country of the user  emits `CountryUpdated` event\",\"_userAddress\":\"The address of the user\"}},\"updateIdentity(address,address)\":{\"details\":\"Updates an identity contract corresponding to a user address.  Requires that the user address should be the owner of the identity contract.  Requires that the user should have an identity contract already deployed that will be replaced.  This function can only be called by a wallet set as agent of the smart contract\",\"params\":{\"_identity\":\"The address of the user's new identity contract  emits `IdentityUpdated` event\",\"_userAddress\":\"The address of the user\"}}},\"version\":1},\"userdoc\":{\"events\":{\"ClaimTopicsRegistrySet(address)\":{\"notice\":\"this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry  the event is emitted by the IdentityRegistry constructor  `claimTopicsRegistry` is the address of the Claim Topics Registry contract\"},\"CountryUpdated(address,uint16)\":{\"notice\":\"this event is emitted when an Identity's country has been updated  the event is emitted by the 'updateCountry' function  `investorAddress` is the address on which the country has been updated  `country` is the numeric code (ISO 3166-1) of the new country\"},\"IdentityRegistered(address,address)\":{\"notice\":\"this event is emitted when an Identity is registered into the Identity Registry.  the event is emitted by the 'registerIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)\"},\"IdentityRemoved(address,address)\":{\"notice\":\"this event is emitted when an Identity is removed from the Identity Registry.  the event is emitted by the 'deleteIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)\"},\"IdentityStorageSet(address)\":{\"notice\":\"this event is emitted when the IdentityRegistryStorage has been set for the IdentityRegistry  the event is emitted by the IdentityRegistry constructor  `identityStorage` is the address of the Identity Registry Storage contract\"},\"IdentityUpdated(address,address)\":{\"notice\":\"this event is emitted when an Identity has been updated  the event is emitted by the 'updateIdentity' function  `oldIdentity` is the old Identity contract's address to update  `newIdentity` is the new Identity contract's\"},\"TrustedIssuersRegistrySet(address)\":{\"notice\":\"this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry  the event is emitted by the IdentityRegistry constructor  `trustedIssuersRegistry` is the address of the Trusted Issuers Registry contract\"}},\"kind\":\"user\",\"methods\":{\"addAgentOnIdentityRegistryContract(address)\":{\"notice\":\"Adds an address as _agent of the Identity Registry Contract.  This function can only be called by the wallet set as owner of the smart contract\"},\"removeAgentOnIdentityRegistryContract(address)\":{\"notice\":\"Removes an address from being _agent of the Identity Registry Contract.  This function can only be called by the wallet set as owner of the smart contract\"},\"transferOwnershipOnIdentityRegistryContract(address)\":{\"notice\":\"Transfers the Ownership of the Identity Registry to a new Owner.  This function can only be called by the wallet set as owner of the smart contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/registry/IIdentityRegistry.sol\":\"IIdentityRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/interface/IClaimIssuer.sol\":{\"keccak256\":\"0xd0493be7cb7342962b46f8e2afdca4614ea0fe34a7f493b2da9db7d361a9042c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://105232aae24e3d0fcb4c80c00793b61b6019f6127c0ec6f9e3082ae01b2e778b\",\"dweb:/ipfs/QmV5C1wbq7H5H6DiakafSX5agAAP6rQSZ5qq7Qgq6VLkXo\"]},\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"project:/contracts/registry/IClaimTopicsRegistry.sol\":{\"keccak256\":\"0x95f8fa17a716771125b203f00890eceb20ac3807f7a39a25b644427b1ff81d61\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://460dceb9e88957d5ce002b80748767c80a7e146c9b38b055a3c1ca04586b2009\",\"dweb:/ipfs/QmVdqEpGMRzSpLKBCtPzaPGatBgUyNm3NS5rQnkkYMnc1C\"]},\"project:/contracts/registry/IIdentityRegistry.sol\":{\"keccak256\":\"0x16a31f2d35143f99cc6b83d0cf6e9da9543c2b8561712079098f3a39d12ae32a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7669a9272b1df8e27e0fc3f5f64977b2b16615e585b673383db1eb157a62bf7c\",\"dweb:/ipfs/QmQzXmoFcFyBPehPyiUzGjaKfXJHLEPZMtFTBTgjuCavah\"]},\"project:/contracts/registry/IIdentityRegistryStorage.sol\":{\"keccak256\":\"0x8cd4de1e77c5da8ca2ff732069bc184aef86bcb94f95a5229e5bd6336abbd06d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f88894a3d046940be03a12cc2da3b3fb6efb51e0461fbea060a9a3190cadcf16\",\"dweb:/ipfs/QmNndZUPdpc83A9LungeAsrcencq3CzTum1tkU6KVdSRNC\"]},\"project:/contracts/registry/ITrustedIssuersRegistry.sol\":{\"keccak256\":\"0x01af20f2f537db3122c60b7c6e60e5036e07c673ef9762428b42129f65fcbc60\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://28f514b876c975777fe84bdb9f96ec5c687e4e4ff5d2b14961ba61affc57d46c\",\"dweb:/ipfs/QmdbVRsg1Q71PVHYxy1r7e5MeiMN5hHHDD8vRnXBSr8JiV\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '../registry/ITrustedIssuersRegistry.sol';\nimport '../registry/IClaimTopicsRegistry.sol';\nimport '../registry/IIdentityRegistryStorage.sol';\n\nimport '@onchain-id/solidity/contracts/interface/IClaimIssuer.sol';\nimport '@onchain-id/solidity/contracts/interface/IIdentity.sol';\n\ninterface IIdentityRegistry {\n    /**\n     *  this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry\n     *  the event is emitted by the IdentityRegistry constructor\n     *  `claimTopicsRegistry` is the address of the Claim Topics Registry contract\n     */\n    event ClaimTopicsRegistrySet(address indexed claimTopicsRegistry);\n\n    /**\n     *  this event is emitted when the IdentityRegistryStorage has been set for the IdentityRegistry\n     *  the event is emitted by the IdentityRegistry constructor\n     *  `identityStorage` is the address of the Identity Registry Storage contract\n     */\n    event IdentityStorageSet(address indexed identityStorage);\n\n    /**\n     *  this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry\n     *  the event is emitted by the IdentityRegistry constructor\n     *  `trustedIssuersRegistry` is the address of the Trusted Issuers Registry contract\n     */\n    event TrustedIssuersRegistrySet(address indexed trustedIssuersRegistry);\n\n    /**\n     *  this event is emitted when an Identity is registered into the Identity Registry.\n     *  the event is emitted by the 'registerIdentity' function\n     *  `investorAddress` is the address of the investor's wallet\n     *  `identity` is the address of the Identity smart contract (onchainID)\n     */\n    event IdentityRegistered(address indexed investorAddress, IIdentity indexed identity);\n\n    /**\n     *  this event is emitted when an Identity is removed from the Identity Registry.\n     *  the event is emitted by the 'deleteIdentity' function\n     *  `investorAddress` is the address of the investor's wallet\n     *  `identity` is the address of the Identity smart contract (onchainID)\n     */\n    event IdentityRemoved(address indexed investorAddress, IIdentity indexed identity);\n\n    /**\n     *  this event is emitted when an Identity has been updated\n     *  the event is emitted by the 'updateIdentity' function\n     *  `oldIdentity` is the old Identity contract's address to update\n     *  `newIdentity` is the new Identity contract's\n     */\n    event IdentityUpdated(IIdentity indexed oldIdentity, IIdentity indexed newIdentity);\n\n    /**\n     *  this event is emitted when an Identity's country has been updated\n     *  the event is emitted by the 'updateCountry' function\n     *  `investorAddress` is the address on which the country has been updated\n     *  `country` is the numeric code (ISO 3166-1) of the new country\n     */\n    event CountryUpdated(address indexed investorAddress, uint16 indexed country);\n\n    /**\n     *  @dev Register an identity contract corresponding to a user address.\n     *  Requires that the user doesn't have an identity contract already registered.\n     *  This function can only be called by a wallet set as agent of the smart contract\n     *  @param _userAddress The address of the user\n     *  @param _identity The address of the user's identity contract\n     *  @param _country The country of the investor\n     *  emits `IdentityRegistered` event\n     */\n    function registerIdentity(\n        address _userAddress,\n        IIdentity _identity,\n        uint16 _country\n    ) external;\n\n    /**\n     *  @dev Removes an user from the identity registry.\n     *  Requires that the user have an identity contract already deployed that will be deleted.\n     *  This function can only be called by a wallet set as agent of the smart contract\n     *  @param _userAddress The address of the user to be removed\n     *  emits `IdentityRemoved` event\n     */\n    function deleteIdentity(address _userAddress) external;\n\n    /**\n     *  @dev Replace the actual identityRegistryStorage contract with a new one.\n     *  This function can only be called by the wallet set as owner of the smart contract\n     *  @param _identityRegistryStorage The address of the new Identity Registry Storage\n     *  emits `IdentityStorageSet` event\n     */\n    function setIdentityRegistryStorage(address _identityRegistryStorage) external;\n\n    /**\n     *  @dev Replace the actual claimTopicsRegistry contract with a new one.\n     *  This function can only be called by the wallet set as owner of the smart contract\n     *  @param _claimTopicsRegistry The address of the new claim Topics Registry\n     *  emits `ClaimTopicsRegistrySet` event\n     */\n    function setClaimTopicsRegistry(address _claimTopicsRegistry) external;\n\n    /**\n     *  @dev Replace the actual trustedIssuersRegistry contract with a new one.\n     *  This function can only be called by the wallet set as owner of the smart contract\n     *  @param _trustedIssuersRegistry The address of the new Trusted Issuers Registry\n     *  emits `TrustedIssuersRegistrySet` event\n     */\n    function setTrustedIssuersRegistry(address _trustedIssuersRegistry) external;\n\n    /**\n     *  @dev Updates the country corresponding to a user address.\n     *  Requires that the user should have an identity contract already deployed that will be replaced.\n     *  This function can only be called by a wallet set as agent of the smart contract\n     *  @param _userAddress The address of the user\n     *  @param _country The new country of the user\n     *  emits `CountryUpdated` event\n     */\n    function updateCountry(address _userAddress, uint16 _country) external;\n\n    /**\n     *  @dev Updates an identity contract corresponding to a user address.\n     *  Requires that the user address should be the owner of the identity contract.\n     *  Requires that the user should have an identity contract already deployed that will be replaced.\n     *  This function can only be called by a wallet set as agent of the smart contract\n     *  @param _userAddress The address of the user\n     *  @param _identity The address of the user's new identity contract\n     *  emits `IdentityUpdated` event\n     */\n    function updateIdentity(address _userAddress, IIdentity _identity) external;\n\n    /**\n     *  @dev function allowing to register identities in batch\n     *  This function can only be called by a wallet set as agent of the smart contract\n     *  Requires that none of the users has an identity contract already registered.\n     *  IMPORTANT : THIS TRANSACTION COULD EXCEED GAS LIMIT IF `_userAddresses.length` IS TOO HIGH,\n     *  USE WITH CARE OR YOU COULD LOSE TX FEES WITH AN \"OUT OF GAS\" TRANSACTION\n     *  @param _userAddresses The addresses of the users\n     *  @param _identities The addresses of the corresponding identity contracts\n     *  @param _countries The countries of the corresponding investors\n     *  emits _userAddresses.length `IdentityRegistered` events\n     */\n    function batchRegisterIdentity(\n        address[] calldata _userAddresses,\n        IIdentity[] calldata _identities,\n        uint16[] calldata _countries\n    ) external;\n\n    /**\n     *  @dev This functions checks whether a wallet has its Identity registered or not\n     *  in the Identity Registry.\n     *  @param _userAddress The address of the user to be checked.\n     *  @return 'True' if the address is contained in the Identity Registry, 'false' if not.\n     */\n    function contains(address _userAddress) external view returns (bool);\n\n    /**\n     *  @dev This functions checks whether an identity contract\n     *  corresponding to the provided user address has the required claims or not based\n     *  on the data fetched from trusted issuers registry and from the claim topics registry\n     *  @param _userAddress The address of the user to be verified.\n     *  @return 'True' if the address is verified, 'false' if not.\n     */\n    function isVerified(address _userAddress) external view returns (bool);\n\n    /**\n     *  @dev Returns the onchainID of an investor.\n     *  @param _userAddress The wallet of the investor\n     */\n    function identity(address _userAddress) external view returns (IIdentity);\n\n    /**\n     *  @dev Returns the country code of an investor.\n     *  @param _userAddress The wallet of the investor\n     */\n    function investorCountry(address _userAddress) external view returns (uint16);\n\n    /**\n     *  @dev Returns the IdentityRegistryStorage linked to the current IdentityRegistry.\n     */\n    function identityStorage() external view returns (IIdentityRegistryStorage);\n\n    /**\n     *  @dev Returns the TrustedIssuersRegistry linked to the current IdentityRegistry.\n     */\n    function issuersRegistry() external view returns (ITrustedIssuersRegistry);\n\n    /**\n     *  @dev Returns the ClaimTopicsRegistry linked to the current IdentityRegistry.\n     */\n    function topicsRegistry() external view returns (IClaimTopicsRegistry);\n\n    /**\n     *  @notice Transfers the Ownership of the Identity Registry to a new Owner.\n     *  This function can only be called by the wallet set as owner of the smart contract\n     *  @param _newOwner The new owner of this contract.\n     */\n    function transferOwnershipOnIdentityRegistryContract(address _newOwner) external;\n\n    /**\n     *  @notice Adds an address as _agent of the Identity Registry Contract.\n     *  This function can only be called by the wallet set as owner of the smart contract\n     *  @param _agent The _agent's address to add.\n     */\n    function addAgentOnIdentityRegistryContract(address _agent) external;\n\n    /**\n     *  @notice Removes an address from being _agent of the Identity Registry Contract.\n     *  This function can only be called by the wallet set as owner of the smart contract\n     *  @param _agent The _agent's address to remove.\n     */\n    function removeAgentOnIdentityRegistryContract(address _agent) external;\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/registry/IIdentityRegistry.sol",
  "ast": {
    "absolutePath": "project:/contracts/registry/IIdentityRegistry.sol",
    "exportedSymbols": {
      "IClaimIssuer": [
        1456
      ],
      "IClaimTopicsRegistry": [
        6444
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistry": [
        6637
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "ITrustedIssuersRegistry": [
        6856
      ]
    },
    "id": 6638,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6446,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:36"
      },
      {
        "absolutePath": "project:/contracts/registry/ITrustedIssuersRegistry.sol",
        "file": "../registry/ITrustedIssuersRegistry.sol",
        "id": 6447,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 6638,
        "sourceUnit": 6857,
        "src": "1118:49:36",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IClaimTopicsRegistry.sol",
        "file": "../registry/IClaimTopicsRegistry.sol",
        "id": 6448,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 6638,
        "sourceUnit": 6445,
        "src": "1168:46:36",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IIdentityRegistryStorage.sol",
        "file": "../registry/IIdentityRegistryStorage.sol",
        "id": 6449,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 6638,
        "sourceUnit": 6760,
        "src": "1215:50:36",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IClaimIssuer.sol",
        "file": "@onchain-id/solidity/contracts/interface/IClaimIssuer.sol",
        "id": 6450,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 6638,
        "sourceUnit": 1457,
        "src": "1267:67:36",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "file": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "id": 6451,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 6638,
        "sourceUnit": 1744,
        "src": "1335:64:36",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IIdentityRegistry",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 6637,
        "linearizedBaseContracts": [
          6637
        ],
        "name": "IIdentityRegistry",
        "nameLocation": "1411:17:36",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 6452,
              "nodeType": "StructuredDocumentation",
              "src": "1435:256:36",
              "text": "  this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry\n  the event is emitted by the IdentityRegistry constructor\n  `claimTopicsRegistry` is the address of the Claim Topics Registry contract"
            },
            "eventSelector": "7170bf15b246e880b2369cd7c67d057760d8a35149e8c64dde91efa22bcc76d0",
            "id": 6456,
            "name": "ClaimTopicsRegistrySet",
            "nameLocation": "1702:22:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6454,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "claimTopicsRegistry",
                  "nameLocation": "1741:19:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6456,
                  "src": "1725:35:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1725:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1724:37:36"
            },
            "src": "1696:66:36"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 6457,
              "nodeType": "StructuredDocumentation",
              "src": "1768:260:36",
              "text": "  this event is emitted when the IdentityRegistryStorage has been set for the IdentityRegistry\n  the event is emitted by the IdentityRegistry constructor\n  `identityStorage` is the address of the Identity Registry Storage contract"
            },
            "eventSelector": "2fa8b95c1db7afe99e3398f3792f008135cedc1fa26b0bb2ecd2352cd166d53c",
            "id": 6461,
            "name": "IdentityStorageSet",
            "nameLocation": "2039:18:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6459,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "identityStorage",
                  "nameLocation": "2074:15:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6461,
                  "src": "2058:31:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6458,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2058:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2057:33:36"
            },
            "src": "2033:58:36"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 6462,
              "nodeType": "StructuredDocumentation",
              "src": "2097:262:36",
              "text": "  this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry\n  the event is emitted by the IdentityRegistry constructor\n  `trustedIssuersRegistry` is the address of the Trusted Issuers Registry contract"
            },
            "eventSelector": "1b98cb79e6f73020175fe87333f1b91ad6a881519c0afe30340c2599b2b4bde0",
            "id": 6466,
            "name": "TrustedIssuersRegistrySet",
            "nameLocation": "2370:25:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6464,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "trustedIssuersRegistry",
                  "nameLocation": "2412:22:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6466,
                  "src": "2396:38:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6463,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2396:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2395:40:36"
            },
            "src": "2364:72:36"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 6467,
              "nodeType": "StructuredDocumentation",
              "src": "2442:307:36",
              "text": "  this event is emitted when an Identity is registered into the Identity Registry.\n  the event is emitted by the 'registerIdentity' function\n  `investorAddress` is the address of the investor's wallet\n  `identity` is the address of the Identity smart contract (onchainID)"
            },
            "eventSelector": "6ae73635c50d24a45af6fbd5e016ac4bed179addbc8bf24e04ff0fcc6d33af19",
            "id": 6474,
            "name": "IdentityRegistered",
            "nameLocation": "2760:18:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6469,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "investorAddress",
                  "nameLocation": "2795:15:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6474,
                  "src": "2779:31:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6468,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2779:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6472,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "identity",
                  "nameLocation": "2830:8:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6474,
                  "src": "2812:26:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6471,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6470,
                      "name": "IIdentity",
                      "nameLocations": [
                        "2812:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "2812:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "2812:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2778:61:36"
            },
            "src": "2754:86:36"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 6475,
              "nodeType": "StructuredDocumentation",
              "src": "2846:302:36",
              "text": "  this event is emitted when an Identity is removed from the Identity Registry.\n  the event is emitted by the 'deleteIdentity' function\n  `investorAddress` is the address of the investor's wallet\n  `identity` is the address of the Identity smart contract (onchainID)"
            },
            "eventSelector": "59d6590e225b81befe259af056324092801080acbb7feab310eb34678871f327",
            "id": 6482,
            "name": "IdentityRemoved",
            "nameLocation": "3159:15:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6481,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6477,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "investorAddress",
                  "nameLocation": "3191:15:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "3175:31:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6476,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3175:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6480,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "identity",
                  "nameLocation": "3226:8:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6482,
                  "src": "3208:26:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6479,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6478,
                      "name": "IIdentity",
                      "nameLocations": [
                        "3208:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "3208:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "3208:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3174:61:36"
            },
            "src": "3153:83:36"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 6483,
              "nodeType": "StructuredDocumentation",
              "src": "3242:261:36",
              "text": "  this event is emitted when an Identity has been updated\n  the event is emitted by the 'updateIdentity' function\n  `oldIdentity` is the old Identity contract's address to update\n  `newIdentity` is the new Identity contract's"
            },
            "eventSelector": "e98082932c8056a0f514da9104e4a66bc2cbaef102ad59d90c4b24220ebf6010",
            "id": 6491,
            "name": "IdentityUpdated",
            "nameLocation": "3514:15:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6486,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "oldIdentity",
                  "nameLocation": "3548:11:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6491,
                  "src": "3530:29:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6485,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6484,
                      "name": "IIdentity",
                      "nameLocations": [
                        "3530:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "3530:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "3530:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6489,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newIdentity",
                  "nameLocation": "3579:11:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6491,
                  "src": "3561:29:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6488,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6487,
                      "name": "IIdentity",
                      "nameLocations": [
                        "3561:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "3561:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "3561:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3529:62:36"
            },
            "src": "3508:84:36"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 6492,
              "nodeType": "StructuredDocumentation",
              "src": "3598:295:36",
              "text": "  this event is emitted when an Identity's country has been updated\n  the event is emitted by the 'updateCountry' function\n  `investorAddress` is the address on which the country has been updated\n  `country` is the numeric code (ISO 3166-1) of the new country"
            },
            "eventSelector": "04ed3b726495c2dca1ff1215d9ca54e1a4030abb5e82b0f6ce55702416cee853",
            "id": 6498,
            "name": "CountryUpdated",
            "nameLocation": "3904:14:36",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6494,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "investorAddress",
                  "nameLocation": "3935:15:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6498,
                  "src": "3919:31:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6493,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3919:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6496,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "country",
                  "nameLocation": "3967:7:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6498,
                  "src": "3952:22:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 6495,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3952:6:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3918:57:36"
            },
            "src": "3898:78:36"
          },
          {
            "documentation": {
              "id": 6499,
              "nodeType": "StructuredDocumentation",
              "src": "3982:474:36",
              "text": "  @dev Register an identity contract corresponding to a user address.\n  Requires that the user doesn't have an identity contract already registered.\n  This function can only be called by a wallet set as agent of the smart contract\n  @param _userAddress The address of the user\n  @param _identity The address of the user's identity contract\n  @param _country The country of the investor\n  emits `IdentityRegistered` event"
            },
            "functionSelector": "454a03e0",
            "id": 6509,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "registerIdentity",
            "nameLocation": "4470:16:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6507,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6501,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "4504:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6509,
                  "src": "4496:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6500,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4496:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6504,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nameLocation": "4536:9:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6509,
                  "src": "4526:19:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6503,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6502,
                      "name": "IIdentity",
                      "nameLocations": [
                        "4526:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "4526:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "4526:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6506,
                  "mutability": "mutable",
                  "name": "_country",
                  "nameLocation": "4562:8:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6509,
                  "src": "4555:15:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 6505,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4555:6:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4486:90:36"
            },
            "returnParameters": {
              "id": 6508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4585:0:36"
            },
            "scope": 6637,
            "src": "4461:125:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6510,
              "nodeType": "StructuredDocumentation",
              "src": "4592:356:36",
              "text": "  @dev Removes an user from the identity registry.\n  Requires that the user have an identity contract already deployed that will be deleted.\n  This function can only be called by a wallet set as agent of the smart contract\n  @param _userAddress The address of the user to be removed\n  emits `IdentityRemoved` event"
            },
            "functionSelector": "a8d29d1d",
            "id": 6515,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "deleteIdentity",
            "nameLocation": "4962:14:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6512,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "4985:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6515,
                  "src": "4977:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4977:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4976:22:36"
            },
            "returnParameters": {
              "id": 6514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5007:0:36"
            },
            "scope": 6637,
            "src": "4953:55:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6516,
              "nodeType": "StructuredDocumentation",
              "src": "5014:312:36",
              "text": "  @dev Replace the actual identityRegistryStorage contract with a new one.\n  This function can only be called by the wallet set as owner of the smart contract\n  @param _identityRegistryStorage The address of the new Identity Registry Storage\n  emits `IdentityStorageSet` event"
            },
            "functionSelector": "26d941ae",
            "id": 6521,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setIdentityRegistryStorage",
            "nameLocation": "5340:26:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6519,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6518,
                  "mutability": "mutable",
                  "name": "_identityRegistryStorage",
                  "nameLocation": "5375:24:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6521,
                  "src": "5367:32:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5367:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5366:34:36"
            },
            "returnParameters": {
              "id": 6520,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5409:0:36"
            },
            "scope": 6637,
            "src": "5331:79:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6522,
              "nodeType": "StructuredDocumentation",
              "src": "5416:304:36",
              "text": "  @dev Replace the actual claimTopicsRegistry contract with a new one.\n  This function can only be called by the wallet set as owner of the smart contract\n  @param _claimTopicsRegistry The address of the new claim Topics Registry\n  emits `ClaimTopicsRegistrySet` event"
            },
            "functionSelector": "670af6a9",
            "id": 6527,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setClaimTopicsRegistry",
            "nameLocation": "5734:22:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6524,
                  "mutability": "mutable",
                  "name": "_claimTopicsRegistry",
                  "nameLocation": "5765:20:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6527,
                  "src": "5757:28:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6523,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5757:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5756:30:36"
            },
            "returnParameters": {
              "id": 6526,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5795:0:36"
            },
            "scope": 6637,
            "src": "5725:71:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6528,
              "nodeType": "StructuredDocumentation",
              "src": "5802:316:36",
              "text": "  @dev Replace the actual trustedIssuersRegistry contract with a new one.\n  This function can only be called by the wallet set as owner of the smart contract\n  @param _trustedIssuersRegistry The address of the new Trusted Issuers Registry\n  emits `TrustedIssuersRegistrySet` event"
            },
            "functionSelector": "e744d789",
            "id": 6533,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setTrustedIssuersRegistry",
            "nameLocation": "6132:25:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6530,
                  "mutability": "mutable",
                  "name": "_trustedIssuersRegistry",
                  "nameLocation": "6166:23:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6533,
                  "src": "6158:31:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6529,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6158:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6157:33:36"
            },
            "returnParameters": {
              "id": 6532,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6199:0:36"
            },
            "scope": 6637,
            "src": "6123:77:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6534,
              "nodeType": "StructuredDocumentation",
              "src": "6206:410:36",
              "text": "  @dev Updates the country corresponding to a user address.\n  Requires that the user should have an identity contract already deployed that will be replaced.\n  This function can only be called by a wallet set as agent of the smart contract\n  @param _userAddress The address of the user\n  @param _country The new country of the user\n  emits `CountryUpdated` event"
            },
            "functionSelector": "3b239a7f",
            "id": 6541,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "updateCountry",
            "nameLocation": "6630:13:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6536,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "6652:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6541,
                  "src": "6644:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6535,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6644:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6538,
                  "mutability": "mutable",
                  "name": "_country",
                  "nameLocation": "6673:8:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6541,
                  "src": "6666:15:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 6537,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "6666:6:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6643:39:36"
            },
            "returnParameters": {
              "id": 6540,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6691:0:36"
            },
            "scope": 6637,
            "src": "6621:71:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6542,
              "nodeType": "StructuredDocumentation",
              "src": "6698:526:36",
              "text": "  @dev Updates an identity contract corresponding to a user address.\n  Requires that the user address should be the owner of the identity contract.\n  Requires that the user should have an identity contract already deployed that will be replaced.\n  This function can only be called by a wallet set as agent of the smart contract\n  @param _userAddress The address of the user\n  @param _identity The address of the user's new identity contract\n  emits `IdentityUpdated` event"
            },
            "functionSelector": "8e098ca1",
            "id": 6550,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "updateIdentity",
            "nameLocation": "7238:14:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6548,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6544,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "7261:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6550,
                  "src": "7253:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6543,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7253:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6547,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nameLocation": "7285:9:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6550,
                  "src": "7275:19:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6546,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6545,
                      "name": "IIdentity",
                      "nameLocations": [
                        "7275:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "7275:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "7275:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7252:43:36"
            },
            "returnParameters": {
              "id": 6549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7304:0:36"
            },
            "scope": 6637,
            "src": "7229:76:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6551,
              "nodeType": "StructuredDocumentation",
              "src": "7311:701:36",
              "text": "  @dev function allowing to register identities in batch\n  This function can only be called by a wallet set as agent of the smart contract\n  Requires that none of the users has an identity contract already registered.\n  IMPORTANT : THIS TRANSACTION COULD EXCEED GAS LIMIT IF `_userAddresses.length` IS TOO HIGH,\n  USE WITH CARE OR YOU COULD LOSE TX FEES WITH AN \"OUT OF GAS\" TRANSACTION\n  @param _userAddresses The addresses of the users\n  @param _identities The addresses of the corresponding identity contracts\n  @param _countries The countries of the corresponding investors\n  emits _userAddresses.length `IdentityRegistered` events"
            },
            "functionSelector": "653dc9f1",
            "id": 6564,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "batchRegisterIdentity",
            "nameLocation": "8026:21:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6554,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "8076:14:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6564,
                  "src": "8057:33:36",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6552,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8057:7:36",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 6553,
                    "nodeType": "ArrayTypeName",
                    "src": "8057:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6558,
                  "mutability": "mutable",
                  "name": "_identities",
                  "nameLocation": "8121:11:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6564,
                  "src": "8100:32:36",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_IIdentity_$1743_$dyn_calldata_ptr",
                    "typeString": "contract IIdentity[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6556,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 6555,
                        "name": "IIdentity",
                        "nameLocations": [
                          "8100:9:36"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1743,
                        "src": "8100:9:36"
                      },
                      "referencedDeclaration": 1743,
                      "src": "8100:9:36",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      }
                    },
                    "id": 6557,
                    "nodeType": "ArrayTypeName",
                    "src": "8100:11:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_IIdentity_$1743_$dyn_storage_ptr",
                      "typeString": "contract IIdentity[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6561,
                  "mutability": "mutable",
                  "name": "_countries",
                  "nameLocation": "8160:10:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6564,
                  "src": "8142:28:36",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 6559,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "8142:6:36",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 6560,
                    "nodeType": "ArrayTypeName",
                    "src": "8142:8:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8047:129:36"
            },
            "returnParameters": {
              "id": 6563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8185:0:36"
            },
            "scope": 6637,
            "src": "8017:169:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6565,
              "nodeType": "StructuredDocumentation",
              "src": "8192:292:36",
              "text": "  @dev This functions checks whether a wallet has its Identity registered or not\n  in the Identity Registry.\n  @param _userAddress The address of the user to be checked.\n  @return 'True' if the address is contained in the Identity Registry, 'false' if not."
            },
            "functionSelector": "5dbe47e8",
            "id": 6572,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "contains",
            "nameLocation": "8498:8:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6567,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "8515:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6572,
                  "src": "8507:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8507:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8506:22:36"
            },
            "returnParameters": {
              "id": 6571,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6570,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6572,
                  "src": "8552:4:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6569,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8552:4:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8551:6:36"
            },
            "scope": 6637,
            "src": "8489:69:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6573,
              "nodeType": "StructuredDocumentation",
              "src": "8564:391:36",
              "text": "  @dev This functions checks whether an identity contract\n  corresponding to the provided user address has the required claims or not based\n  on the data fetched from trusted issuers registry and from the claim topics registry\n  @param _userAddress The address of the user to be verified.\n  @return 'True' if the address is verified, 'false' if not."
            },
            "functionSelector": "b9209e33",
            "id": 6580,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isVerified",
            "nameLocation": "8969:10:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6576,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6575,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "8988:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6580,
                  "src": "8980:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6574,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8980:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8979:22:36"
            },
            "returnParameters": {
              "id": 6579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6578,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6580,
                  "src": "9025:4:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6577,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9025:4:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9024:6:36"
            },
            "scope": 6637,
            "src": "8960:71:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6581,
              "nodeType": "StructuredDocumentation",
              "src": "9037:117:36",
              "text": "  @dev Returns the onchainID of an investor.\n  @param _userAddress The wallet of the investor"
            },
            "functionSelector": "f0eb5e54",
            "id": 6589,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "identity",
            "nameLocation": "9168:8:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6583,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "9185:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6589,
                  "src": "9177:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6582,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9177:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9176:22:36"
            },
            "returnParameters": {
              "id": 6588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6587,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6589,
                  "src": "9222:9:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentity_$1743",
                    "typeString": "contract IIdentity"
                  },
                  "typeName": {
                    "id": 6586,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6585,
                      "name": "IIdentity",
                      "nameLocations": [
                        "9222:9:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1743,
                      "src": "9222:9:36"
                    },
                    "referencedDeclaration": 1743,
                    "src": "9222:9:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9221:11:36"
            },
            "scope": 6637,
            "src": "9159:74:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6590,
              "nodeType": "StructuredDocumentation",
              "src": "9239:120:36",
              "text": "  @dev Returns the country code of an investor.\n  @param _userAddress The wallet of the investor"
            },
            "functionSelector": "7e42683b",
            "id": 6597,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "investorCountry",
            "nameLocation": "9373:15:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6592,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "9397:12:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6597,
                  "src": "9389:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6591,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9389:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9388:22:36"
            },
            "returnParameters": {
              "id": 6596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6595,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6597,
                  "src": "9434:6:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 6594,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "9434:6:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9433:8:36"
            },
            "scope": 6637,
            "src": "9364:78:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6598,
              "nodeType": "StructuredDocumentation",
              "src": "9448:100:36",
              "text": "  @dev Returns the IdentityRegistryStorage linked to the current IdentityRegistry."
            },
            "functionSelector": "f11abfd8",
            "id": 6604,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "identityStorage",
            "nameLocation": "9562:15:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6599,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9577:2:36"
            },
            "returnParameters": {
              "id": 6603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6602,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6604,
                  "src": "9603:24:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentityRegistryStorage_$6759",
                    "typeString": "contract IIdentityRegistryStorage"
                  },
                  "typeName": {
                    "id": 6601,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6600,
                      "name": "IIdentityRegistryStorage",
                      "nameLocations": [
                        "9603:24:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 6759,
                      "src": "9603:24:36"
                    },
                    "referencedDeclaration": 6759,
                    "src": "9603:24:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentityRegistryStorage_$6759",
                      "typeString": "contract IIdentityRegistryStorage"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9602:26:36"
            },
            "scope": 6637,
            "src": "9553:76:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6605,
              "nodeType": "StructuredDocumentation",
              "src": "9635:99:36",
              "text": "  @dev Returns the TrustedIssuersRegistry linked to the current IdentityRegistry."
            },
            "functionSelector": "b4f3fcb7",
            "id": 6611,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "issuersRegistry",
            "nameLocation": "9748:15:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9763:2:36"
            },
            "returnParameters": {
              "id": 6610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6609,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6611,
                  "src": "9789:23:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ITrustedIssuersRegistry_$6856",
                    "typeString": "contract ITrustedIssuersRegistry"
                  },
                  "typeName": {
                    "id": 6608,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6607,
                      "name": "ITrustedIssuersRegistry",
                      "nameLocations": [
                        "9789:23:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 6856,
                      "src": "9789:23:36"
                    },
                    "referencedDeclaration": 6856,
                    "src": "9789:23:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITrustedIssuersRegistry_$6856",
                      "typeString": "contract ITrustedIssuersRegistry"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9788:25:36"
            },
            "scope": 6637,
            "src": "9739:75:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6612,
              "nodeType": "StructuredDocumentation",
              "src": "9820:96:36",
              "text": "  @dev Returns the ClaimTopicsRegistry linked to the current IdentityRegistry."
            },
            "functionSelector": "3b3e12f4",
            "id": 6618,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "topicsRegistry",
            "nameLocation": "9930:14:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6613,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9944:2:36"
            },
            "returnParameters": {
              "id": 6617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6616,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 6618,
                  "src": "9970:20:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IClaimTopicsRegistry_$6444",
                    "typeString": "contract IClaimTopicsRegistry"
                  },
                  "typeName": {
                    "id": 6615,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6614,
                      "name": "IClaimTopicsRegistry",
                      "nameLocations": [
                        "9970:20:36"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 6444,
                      "src": "9970:20:36"
                    },
                    "referencedDeclaration": 6444,
                    "src": "9970:20:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IClaimTopicsRegistry_$6444",
                      "typeString": "contract IClaimTopicsRegistry"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9969:22:36"
            },
            "scope": 6637,
            "src": "9921:71:36",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6619,
              "nodeType": "StructuredDocumentation",
              "src": "9998:239:36",
              "text": "  @notice Transfers the Ownership of the Identity Registry to a new Owner.\n  This function can only be called by the wallet set as owner of the smart contract\n  @param _newOwner The new owner of this contract."
            },
            "functionSelector": "ce240d9c",
            "id": 6624,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferOwnershipOnIdentityRegistryContract",
            "nameLocation": "10251:43:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6621,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nameLocation": "10303:9:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6624,
                  "src": "10295:17:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6620,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10295:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10294:19:36"
            },
            "returnParameters": {
              "id": 6623,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10322:0:36"
            },
            "scope": 6637,
            "src": "10242:81:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6625,
              "nodeType": "StructuredDocumentation",
              "src": "10329:229:36",
              "text": "  @notice Adds an address as _agent of the Identity Registry Contract.\n  This function can only be called by the wallet set as owner of the smart contract\n  @param _agent The _agent's address to add."
            },
            "functionSelector": "50bc7bda",
            "id": 6630,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "addAgentOnIdentityRegistryContract",
            "nameLocation": "10572:34:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6627,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "10615:6:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6630,
                  "src": "10607:14:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10607:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10606:16:36"
            },
            "returnParameters": {
              "id": 6629,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10631:0:36"
            },
            "scope": 6637,
            "src": "10563:69:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 6631,
              "nodeType": "StructuredDocumentation",
              "src": "10638:243:36",
              "text": "  @notice Removes an address from being _agent of the Identity Registry Contract.\n  This function can only be called by the wallet set as owner of the smart contract\n  @param _agent The _agent's address to remove."
            },
            "functionSelector": "5e5741f3",
            "id": 6636,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "removeAgentOnIdentityRegistryContract",
            "nameLocation": "10895:37:36",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6633,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "10941:6:36",
                  "nodeType": "VariableDeclaration",
                  "scope": 6636,
                  "src": "10933:14:36",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6632,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10933:7:36",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10932:16:36"
            },
            "returnParameters": {
              "id": 6635,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10957:0:36"
            },
            "scope": 6637,
            "src": "10886:72:36",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 6638,
        "src": "1401:9559:36",
        "usedErrors": []
      }
    ],
    "src": "1093:9868:36"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.369Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "addAgentOnIdentityRegistryContract(address)": {
        "params": {
          "_agent": "The _agent's address to add."
        }
      },
      "batchRegisterIdentity(address[],address[],uint16[])": {
        "details": "function allowing to register identities in batch  This function can only be called by a wallet set as agent of the smart contract  Requires that none of the users has an identity contract already registered.  IMPORTANT : THIS TRANSACTION COULD EXCEED GAS LIMIT IF `_userAddresses.length` IS TOO HIGH,  USE WITH CARE OR YOU COULD LOSE TX FEES WITH AN \"OUT OF GAS\" TRANSACTION",
        "params": {
          "_countries": "The countries of the corresponding investors  emits _userAddresses.length `IdentityRegistered` events",
          "_identities": "The addresses of the corresponding identity contracts",
          "_userAddresses": "The addresses of the users"
        }
      },
      "contains(address)": {
        "details": "This functions checks whether a wallet has its Identity registered or not  in the Identity Registry.",
        "params": {
          "_userAddress": "The address of the user to be checked."
        },
        "returns": {
          "_0": "'True' if the address is contained in the Identity Registry, 'false' if not."
        }
      },
      "deleteIdentity(address)": {
        "details": "Removes an user from the identity registry.  Requires that the user have an identity contract already deployed that will be deleted.  This function can only be called by a wallet set as agent of the smart contract",
        "params": {
          "_userAddress": "The address of the user to be removed  emits `IdentityRemoved` event"
        }
      },
      "identity(address)": {
        "details": "Returns the onchainID of an investor.",
        "params": {
          "_userAddress": "The wallet of the investor"
        }
      },
      "identityStorage()": {
        "details": "Returns the IdentityRegistryStorage linked to the current IdentityRegistry."
      },
      "investorCountry(address)": {
        "details": "Returns the country code of an investor.",
        "params": {
          "_userAddress": "The wallet of the investor"
        }
      },
      "isVerified(address)": {
        "details": "This functions checks whether an identity contract  corresponding to the provided user address has the required claims or not based  on the data fetched from trusted issuers registry and from the claim topics registry",
        "params": {
          "_userAddress": "The address of the user to be verified."
        },
        "returns": {
          "_0": "'True' if the address is verified, 'false' if not."
        }
      },
      "issuersRegistry()": {
        "details": "Returns the TrustedIssuersRegistry linked to the current IdentityRegistry."
      },
      "registerIdentity(address,address,uint16)": {
        "details": "Register an identity contract corresponding to a user address.  Requires that the user doesn't have an identity contract already registered.  This function can only be called by a wallet set as agent of the smart contract",
        "params": {
          "_country": "The country of the investor  emits `IdentityRegistered` event",
          "_identity": "The address of the user's identity contract",
          "_userAddress": "The address of the user"
        }
      },
      "removeAgentOnIdentityRegistryContract(address)": {
        "params": {
          "_agent": "The _agent's address to remove."
        }
      },
      "setClaimTopicsRegistry(address)": {
        "details": "Replace the actual claimTopicsRegistry contract with a new one.  This function can only be called by the wallet set as owner of the smart contract",
        "params": {
          "_claimTopicsRegistry": "The address of the new claim Topics Registry  emits `ClaimTopicsRegistrySet` event"
        }
      },
      "setIdentityRegistryStorage(address)": {
        "details": "Replace the actual identityRegistryStorage contract with a new one.  This function can only be called by the wallet set as owner of the smart contract",
        "params": {
          "_identityRegistryStorage": "The address of the new Identity Registry Storage  emits `IdentityStorageSet` event"
        }
      },
      "setTrustedIssuersRegistry(address)": {
        "details": "Replace the actual trustedIssuersRegistry contract with a new one.  This function can only be called by the wallet set as owner of the smart contract",
        "params": {
          "_trustedIssuersRegistry": "The address of the new Trusted Issuers Registry  emits `TrustedIssuersRegistrySet` event"
        }
      },
      "topicsRegistry()": {
        "details": "Returns the ClaimTopicsRegistry linked to the current IdentityRegistry."
      },
      "transferOwnershipOnIdentityRegistryContract(address)": {
        "params": {
          "_newOwner": "The new owner of this contract."
        }
      },
      "updateCountry(address,uint16)": {
        "details": "Updates the country corresponding to a user address.  Requires that the user should have an identity contract already deployed that will be replaced.  This function can only be called by a wallet set as agent of the smart contract",
        "params": {
          "_country": "The new country of the user  emits `CountryUpdated` event",
          "_userAddress": "The address of the user"
        }
      },
      "updateIdentity(address,address)": {
        "details": "Updates an identity contract corresponding to a user address.  Requires that the user address should be the owner of the identity contract.  Requires that the user should have an identity contract already deployed that will be replaced.  This function can only be called by a wallet set as agent of the smart contract",
        "params": {
          "_identity": "The address of the user's new identity contract  emits `IdentityUpdated` event",
          "_userAddress": "The address of the user"
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "events": {
      "ClaimTopicsRegistrySet(address)": {
        "notice": "this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry  the event is emitted by the IdentityRegistry constructor  `claimTopicsRegistry` is the address of the Claim Topics Registry contract"
      },
      "CountryUpdated(address,uint16)": {
        "notice": "this event is emitted when an Identity's country has been updated  the event is emitted by the 'updateCountry' function  `investorAddress` is the address on which the country has been updated  `country` is the numeric code (ISO 3166-1) of the new country"
      },
      "IdentityRegistered(address,address)": {
        "notice": "this event is emitted when an Identity is registered into the Identity Registry.  the event is emitted by the 'registerIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)"
      },
      "IdentityRemoved(address,address)": {
        "notice": "this event is emitted when an Identity is removed from the Identity Registry.  the event is emitted by the 'deleteIdentity' function  `investorAddress` is the address of the investor's wallet  `identity` is the address of the Identity smart contract (onchainID)"
      },
      "IdentityStorageSet(address)": {
        "notice": "this event is emitted when the IdentityRegistryStorage has been set for the IdentityRegistry  the event is emitted by the IdentityRegistry constructor  `identityStorage` is the address of the Identity Registry Storage contract"
      },
      "IdentityUpdated(address,address)": {
        "notice": "this event is emitted when an Identity has been updated  the event is emitted by the 'updateIdentity' function  `oldIdentity` is the old Identity contract's address to update  `newIdentity` is the new Identity contract's"
      },
      "TrustedIssuersRegistrySet(address)": {
        "notice": "this event is emitted when the ClaimTopicsRegistry has been set for the IdentityRegistry  the event is emitted by the IdentityRegistry constructor  `trustedIssuersRegistry` is the address of the Trusted Issuers Registry contract"
      }
    },
    "kind": "user",
    "methods": {
      "addAgentOnIdentityRegistryContract(address)": {
        "notice": "Adds an address as _agent of the Identity Registry Contract.  This function can only be called by the wallet set as owner of the smart contract"
      },
      "removeAgentOnIdentityRegistryContract(address)": {
        "notice": "Removes an address from being _agent of the Identity Registry Contract.  This function can only be called by the wallet set as owner of the smart contract"
      },
      "transferOwnershipOnIdentityRegistryContract(address)": {
        "notice": "Transfers the Ownership of the Identity Registry to a new Owner.  This function can only be called by the wallet set as owner of the smart contract"
      }
    },
    "version": 1
  }
}