{
  "contractName": "OwnerRolesUpgradeable",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleRemoved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isOwnerAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addOwnerAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeOwnerAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isRegistryAddressSetter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addRegistryAddressSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeRegistryAddressSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isComplianceSetter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addComplianceSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeComplianceSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isClaimRegistryManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addClaimRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeClaimRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isIssuersRegistryManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addIssuersRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeIssuersRegistryManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "isTokenInfoManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addTokenInfoManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "removeTokenInfoManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addClaimRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addComplianceSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addIssuersRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addOwnerAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addRegistryAddressSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addTokenInfoManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isClaimRegistryManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isComplianceSetter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isIssuersRegistryManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isOwnerAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isRegistryAddressSetter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isTokenInfoManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeClaimRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeComplianceSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeIssuersRegistryManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeOwnerAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeRegistryAddressSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeTokenInfoManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isClaimRegistryManager(address)\":{\"details\":\"ClaimRegistryManager Role _claimRegistryManager\"},\"isComplianceSetter(address)\":{\"details\":\"ComplianceSetter Role _complianceSetter\"},\"isIssuersRegistryManager(address)\":{\"details\":\"IssuersRegistryManager Role _issuersRegistryManager\"},\"isOwnerAdmin(address)\":{\"details\":\"OwnerAdmin Role _ownerAdmin\"},\"isRegistryAddressSetter(address)\":{\"details\":\"RegistryAddressSetter Role _registryAddressSetter\"},\"isTokenInfoManager(address)\":{\"details\":\"TokenInfoManager Role _tokenInfoManager\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/roles/OwnerRolesUpgradeable.sol\":\"OwnerRolesUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"project:/contracts/roles/OwnerRolesUpgradeable.sol\":{\"keccak256\":\"0x9dc942927b5f3d33d366f84a91f1795654d3fd83f6f0de2cbd662df980480fc0\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://4675601b6becdf7f4536bdc17e09821ca3ad2753c6b89cf303d8c0ae02bc3cd0\",\"dweb:/ipfs/QmNLn14nEVXnqKjPq789h9SpD9vQjXbNGkrBUPoYwz1XiC\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610e38806100206000396000f3fe608060405234801561001057600080fd5b50600436106101075760003560e01c8063039ec2cd1461010c5780632447e50b146101215780633ba7c75e146101495780633c734ce81461015c578063405225541461016f57806354b9797f1461018257806362cdd482146101955780636ff7bff7146101a8578063715018a6146101bb57806382870937146101c3578063882fc6ca146101d65780638da5cb5b146101e9578063934b2da41461020957806394e69f1b1461021c578063ac95fc911461022f578063ae5aaa3b14610242578063ce4bdac714610255578063e110255b14610268578063f2fde38b1461027b578063faed696a1461028e578063ff806311146102a1575b600080fd5b61011f61011a366004610d11565b6102b4565b005b61013461012f366004610d11565b610365565b60405190151581526020015b60405180910390f35b610134610157366004610d11565b610378565b61013461016a366004610d11565b610385565b61011f61017d366004610d11565b610392565b61011f610190366004610d11565b610429565b6101346101a3366004610d11565b6104ba565b61011f6101b6366004610d11565b6104c7565b61011f610564565b6101346101d1366004610d11565b610578565b61011f6101e4366004610d11565b610585565b6101f161061c565b6040516001600160a01b039091168152602001610140565b61011f610217366004610d11565b61062b565b61011f61022a366004610d11565b6106bc565b61011f61023d366004610d11565b610753565b61011f610250366004610d11565b6107f0565b61011f610263366004610d11565b61088c565b61011f610276366004610d11565b610923565b61011f610289366004610d11565b6109be565b61011f61029c366004610d11565b610a37565b6101346102af366004610d11565b610ad2565b336102bd61061c565b6001600160a01b031614806102d657506102d6336104ba565b6102fb5760405162461bcd60e51b81526004016102f290610d41565b60405180910390fd5b610306606682610adf565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b60405180910390a25050565b6000610372606a83610b61565b92915050565b6000610372606783610b61565b6000610372606883610b61565b3361039b61061c565b6001600160a01b031614806103b457506103b4336104ba565b6103d05760405162461bcd60e51b81526004016102f290610d41565b6103db606782610adf565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b3361043261061c565b6001600160a01b0316148061044b575061044b336104ba565b6104675760405162461bcd60e51b81526004016102f290610d41565b610472606582610adf565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b6000610372606583610b61565b336104d061061c565b6001600160a01b031614806104e957506104e9336104ba565b6105055760405162461bcd60e51b81526004016102f290610d41565b610510606982610adf565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b61056c610be4565b6105766000610c43565b565b6000610372606683610b61565b3361058e61061c565b6001600160a01b031614806105a757506105a7336104ba565b6105c35760405162461bcd60e51b81526004016102f290610d41565b6105ce606a82610adf565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b6033546001600160a01b031690565b3361063461061c565b6001600160a01b0316148061064d575061064d336104ba565b6106695760405162461bcd60e51b81526004016102f290610d41565b610674606582610c95565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b336106c561061c565b6001600160a01b031614806106de57506106de336104ba565b6106fa5760405162461bcd60e51b81526004016102f290610d41565b610705606a82610c95565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b3361075c61061c565b6001600160a01b031614806107755750610775336104ba565b6107915760405162461bcd60e51b81526004016102f290610d41565b61079c606982610c95565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b336107f961061c565b6001600160a01b031614806108125750610812336104ba565b61082e5760405162461bcd60e51b81526004016102f290610d41565b610839606682610c95565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b3361089561061c565b6001600160a01b031614806108ae57506108ae336104ba565b6108ca5760405162461bcd60e51b81526004016102f290610d41565b6108d5606782610c95565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b3361092c61061c565b6001600160a01b031614806109455750610945336104ba565b6109615760405162461bcd60e51b81526004016102f290610d41565b61096c606882610adf565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b6109c6610be4565b6001600160a01b038116610a2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102f2565b610a3481610c43565b50565b33610a4061061c565b6001600160a01b03161480610a595750610a59336104ba565b610a755760405162461bcd60e51b81526004016102f290610d41565b610a80606882610c95565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b6000610372606983610b61565b610ae98282610b61565b610b3f5760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b60648201526084016102f2565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60006001600160a01b038216610bc45760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016102f2565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610bed61061c565b6001600160a01b0316146105765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610c9f8282610b61565b15610cec5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064016102f2565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600060208284031215610d2357600080fd5b81356001600160a01b0381168114610d3a57600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610da157858101830151858201604001528201610d85565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a264697066735822122013150f22a5a9ff8e7cd22218e0ab540b0f057b308b8664aa43ae2c5cb41e24f764736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101075760003560e01c8063039ec2cd1461010c5780632447e50b146101215780633ba7c75e146101495780633c734ce81461015c578063405225541461016f57806354b9797f1461018257806362cdd482146101955780636ff7bff7146101a8578063715018a6146101bb57806382870937146101c3578063882fc6ca146101d65780638da5cb5b146101e9578063934b2da41461020957806394e69f1b1461021c578063ac95fc911461022f578063ae5aaa3b14610242578063ce4bdac714610255578063e110255b14610268578063f2fde38b1461027b578063faed696a1461028e578063ff806311146102a1575b600080fd5b61011f61011a366004610d11565b6102b4565b005b61013461012f366004610d11565b610365565b60405190151581526020015b60405180910390f35b610134610157366004610d11565b610378565b61013461016a366004610d11565b610385565b61011f61017d366004610d11565b610392565b61011f610190366004610d11565b610429565b6101346101a3366004610d11565b6104ba565b61011f6101b6366004610d11565b6104c7565b61011f610564565b6101346101d1366004610d11565b610578565b61011f6101e4366004610d11565b610585565b6101f161061c565b6040516001600160a01b039091168152602001610140565b61011f610217366004610d11565b61062b565b61011f61022a366004610d11565b6106bc565b61011f61023d366004610d11565b610753565b61011f610250366004610d11565b6107f0565b61011f610263366004610d11565b61088c565b61011f610276366004610d11565b610923565b61011f610289366004610d11565b6109be565b61011f61029c366004610d11565b610a37565b6101346102af366004610d11565b610ad2565b336102bd61061c565b6001600160a01b031614806102d657506102d6336104ba565b6102fb5760405162461bcd60e51b81526004016102f290610d41565b60405180910390fd5b610306606682610adf565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b60405180910390a25050565b6000610372606a83610b61565b92915050565b6000610372606783610b61565b6000610372606883610b61565b3361039b61061c565b6001600160a01b031614806103b457506103b4336104ba565b6103d05760405162461bcd60e51b81526004016102f290610d41565b6103db606782610adf565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b3361043261061c565b6001600160a01b0316148061044b575061044b336104ba565b6104675760405162461bcd60e51b81526004016102f290610d41565b610472606582610adf565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b6000610372606583610b61565b336104d061061c565b6001600160a01b031614806104e957506104e9336104ba565b6105055760405162461bcd60e51b81526004016102f290610d41565b610510606982610adf565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b61056c610be4565b6105766000610c43565b565b6000610372606683610b61565b3361058e61061c565b6001600160a01b031614806105a757506105a7336104ba565b6105c35760405162461bcd60e51b81526004016102f290610d41565b6105ce606a82610adf565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b6033546001600160a01b031690565b3361063461061c565b6001600160a01b0316148061064d575061064d336104ba565b6106695760405162461bcd60e51b81526004016102f290610d41565b610674606582610c95565b604080518082018252600a81526927bbb732b920b236b4b760b11b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b336106c561061c565b6001600160a01b031614806106de57506106de336104ba565b6106fa5760405162461bcd60e51b81526004016102f290610d41565b610705606a82610c95565b604080518082018252601081526f2a37b5b2b724b73337a6b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b3361075c61061c565b6001600160a01b031614806107755750610775336104ba565b6107915760405162461bcd60e51b81526004016102f290610d41565b61079c606982610c95565b604080518082018252601681527524b9b9bab2b939a932b3b4b9ba393ca6b0b730b3b2b960511b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b336107f961061c565b6001600160a01b031614806108125750610812336104ba565b61082e5760405162461bcd60e51b81526004016102f290610d41565b610839606682610c95565b60408051808201825260158152742932b3b4b9ba393ca0b2323932b9b9a9b2ba3a32b960591b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b3361089561061c565b6001600160a01b031614806108ae57506108ae336104ba565b6108ca5760405162461bcd60e51b81526004016102f290610d41565b6108d5606782610c95565b604080518082018252601081526f21b7b6b83634b0b731b2a9b2ba3a32b960811b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b3361092c61061c565b6001600160a01b031614806109455750610945336104ba565b6109615760405162461bcd60e51b81526004016102f290610d41565b61096c606882610adf565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610dc383398151915290610359908490610d74565b6109c6610be4565b6001600160a01b038116610a2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102f2565b610a3481610c43565b50565b33610a4061061c565b6001600160a01b03161480610a595750610a59336104ba565b610a755760405162461bcd60e51b81526004016102f290610d41565b610a80606882610c95565b604080518082018252601481527321b630b4b6a932b3b4b9ba393ca6b0b730b3b2b960611b602082015290516001600160a01b03831690600080516020610de383398151915290610359908490610d74565b6000610372606983610b61565b610ae98282610b61565b610b3f5760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b60648201526084016102f2565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60006001600160a01b038216610bc45760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016102f2565b506001600160a01b03166000908152602091909152604090205460ff1690565b33610bed61061c565b6001600160a01b0316146105765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610c9f8282610b61565b15610cec5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064016102f2565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b600060208284031215610d2357600080fd5b81356001600160a01b0381168114610d3a57600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610da157858101830151858201604001528201610d85565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a264697066735822122013150f22a5a9ff8e7cd22218e0ab540b0f057b308b8664aa43ae2c5cb41e24f764736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:3542:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:216:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "155:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "181:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "168:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "168:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "159:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "213:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "224:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "239:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "244:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "235:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "235:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "248:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "231:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "231:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "220:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "220:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "210:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "210:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "203:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "200:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:286:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:54",
                "type": ""
              }
            ],
            "src": "305:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "598:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "608:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "620:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "631:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "616:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "616:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "608:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "650:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "665:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "681:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "686:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "677:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "677:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "690:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "673:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "673:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "661:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "661:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "643:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "643:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "643:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "567:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "578:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "589:4:54",
                "type": ""
              }
            ],
            "src": "497:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "879:175:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "896:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "907:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "889:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "889:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "889:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "930:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "941:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "926:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "926:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "946:2:54",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "919:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "919:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "919:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "969:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "980:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "965:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "965:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "985:27:54",
                        "type": "",
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "958:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "958:55:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "958:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1022:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1034:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1045:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1030:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1030:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1022:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "856:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "870:4:54",
                "type": ""
              }
            ],
            "src": "705:349:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1180:427:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1190:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1200:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1194:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1218:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1229:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1211:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1211:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1211:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1241:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1261:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1255:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1255:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1245:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1288:9:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1299:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1284:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1284:18:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1304:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1277:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1277:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1277:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1320:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1329:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "1324:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1389:90:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "1418:9:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "1429:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1414:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1414:17:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1433:2:54",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1410:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1410:26:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1452:6:54"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1460:1:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1448:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1448:14:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "1464:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1444:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1444:23:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "1438:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1438:30:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1403:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1403:66:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1403:66:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "1350:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1353:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1347:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1347:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1361:19:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1363:15:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "1372:1:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "1375:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1368:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1368:10:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "1363:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1343:3:54",
                    "statements": []
                  },
                  "src": "1339:140:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1503:9:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1514:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1499:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1499:22:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1523:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1495:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1495:31:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1528:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1488:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1488:42:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1488:42:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1539:62:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1555:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1574:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1582:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1570:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1570:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1591:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1587:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1587:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1566:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1566:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1551:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1551:45:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1598:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1547:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1547:54:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1539:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1149:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1160:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1171:4:54",
                "type": ""
              }
            ],
            "src": "1059:548:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1786:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1803:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1814:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1796:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1796:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1796:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1837:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1848:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1833:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1833:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1853:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1826:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1826:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1826:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1876:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1887:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1872:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1872:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1892:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1865:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1865:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1865:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1947:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1958:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1943:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1943:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1963:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1936:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1936:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1936:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1981:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1993:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2004:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1989:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1989:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1981:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1763:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1777:4:54",
                "type": ""
              }
            ],
            "src": "1612:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2193:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2210:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2221:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2203:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2203:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2244:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2255:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2240:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2240:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2260:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2233:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2233:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2233:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2283:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2294:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2279:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2299:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2272:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2272:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2272:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2354:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2365:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2350:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2350:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2370:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2343:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2343:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2343:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2383:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2395:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2406:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2391:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2391:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2383:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2170:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2184:4:54",
                "type": ""
              }
            ],
            "src": "2019:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2595:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2612:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2623:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2605:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2605:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2605:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2646:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2657:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2642:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2642:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2662:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2635:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2635:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2635:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2685:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2696:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2681:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2681:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2701:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2674:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2674:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2674:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2756:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2767:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2752:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2752:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2772:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2745:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2745:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2745:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2786:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2798:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2809:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2794:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2794:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2786:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2572:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2586:4:54",
                "type": ""
              }
            ],
            "src": "2421:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2998:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3015:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3026:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3008:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3008:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3008:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3049:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3060:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3045:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3045:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3065:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3038:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3038:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3038:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3088:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3099:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3084:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3084:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3104:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3077:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3077:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3077:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3148:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3160:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3171:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3156:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3156:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3148:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2975:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2989:4:54",
                "type": ""
              }
            ],
            "src": "2824:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3359:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3376:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3387:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3369:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3369:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3369:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3410:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3421:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3406:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3406:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3426:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3399:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3399:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3399:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3449:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3460:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3445:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3445:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3465:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3438:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3438:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3438:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3508:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3520:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3531:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3516:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3516:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3508:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3336:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3350:4:54",
                "type": ""
              }
            ],
            "src": "3185:355:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Admin\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1218:4319:49:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1218:4319:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2805:222;;;;;;:::i;:::-;;:::i;:::-;;4993:124;;;;;;:::i;:::-;;:::i;:::-;;;470:14:54;;463:22;445:41;;433:2;418:18;4993:124:49;;;;;;;;3087;;;;;;:::i;:::-;;:::i;3697:132::-;;;;;;:::i;:::-;;:::i;3422:207::-;;;;;;:::i;:::-;;:::i;2186:189::-;;;;;;:::i;:::-;;:::i;1881:112::-;;;;;;:::i;:::-;;:::i;4708:225::-;;;;;;:::i;:::-;;:::i;2071:101:9:-;;;:::i;2445:134:49:-;;;;;;:::i;:::-;;:::i;5328:207::-;;;;;;:::i;:::-;;:::i;1441:85:9:-;;;:::i;:::-;;;-1:-1:-1;;;;;661:32:54;;;643:51;;631:2;616:18;1441:85:9;497:203:54;1999:181:49;;;;;;:::i;:::-;;:::i;5123:199::-;;;;;;:::i;:::-;;:::i;4485:217::-;;;;;;:::i;:::-;;:::i;2585:214::-;;;;;;:::i;:::-;;:::i;3217:199::-;;;;;;:::i;:::-;;:::i;4052:219::-;;;;;;:::i;:::-;;:::i;2321:198:9:-;;;;;;:::i;:::-;;:::i;3835:211:49:-;;;;;;:::i;:::-;;:::i;4343:136::-;;;;;;:::i;:::-;;:::i;2805:222::-;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;;;;;;;;;2887:37:::1;:22;2917:6:::0;2887:29:::1;:37::i;:::-;2934:45;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2934:45:49::1;::::0;::::1;::::0;2994:26;;-1:-1:-1;;;;;2994:26:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;2994:26:49;::::1;::::0;2934:45;;2994:26:::1;:::i;:::-;;;;;;;;2877:150;2805:222:::0;:::o;4993:124::-;5058:4;5081:29;:17;5103:6;5081:21;:29::i;:::-;5074:36;4993:124;-1:-1:-1;;4993:124:49:o;3087:::-;3152:4;3175:29;:17;3197:6;3175:21;:29::i;3697:132::-;3766:4;3789:33;:21;3815:6;3789:25;:33::i;3422:207::-;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;3499:32:::1;:17;3524:6:::0;3499:24:::1;:32::i;:::-;3541:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3541:40:49::1;::::0;::::1;::::0;3596:26;;-1:-1:-1;;;;;3596:26:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;3596:26:49;::::1;::::0;3541:40;;3596:26:::1;:::i;2186:189::-:0;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;2257:26:::1;:11;2276:6:::0;2257:18:::1;:26::i;:::-;2293:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2293:34:49::1;::::0;::::1;::::0;2342:26;;-1:-1:-1;;;;;2342:26:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;2342:26:49;::::1;::::0;2293:34;;2342:26:::1;:::i;1881:112::-:0;1940:4;1963:23;:11;1979:6;1963:15;:23::i;4708:225::-;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;4791:38:::1;:23;4822:6:::0;4791:30:::1;:38::i;:::-;4839:46;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4839:46:49::1;::::0;::::1;::::0;4900:26;;-1:-1:-1;;;;;4900:26:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;4900:26:49;::::1;::::0;4839:46;;4900:26:::1;:::i;2071:101:9:-:0;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2445:134:49:-;2515:4;2538:34;:22;2565:6;2538:26;:34::i;5328:207::-;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;5405:32:::1;:17;5430:6:::0;5405:24:::1;:32::i;:::-;5447:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5447:40:49::1;::::0;::::1;::::0;5502:26;;-1:-1:-1;;;;;5502:26:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;5502:26:49;::::1;::::0;5447:40;;5502:26:::1;:::i;1441:85:9:-:0;1513:6;;-1:-1:-1;;;;;1513:6:9;;1441:85::o;1999:181:49:-;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;2067:23:::1;:11;2083:6:::0;2067:15:::1;:23::i;:::-;2100:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2100:34:49::1;::::0;::::1;::::0;2149:24;;-1:-1:-1;;;;;2149:24:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;2149:24:49;::::1;::::0;2100:34;;2149:24:::1;:::i;5123:199::-:0;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;5197:29:::1;:17;5219:6:::0;5197:21:::1;:29::i;:::-;5236:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5236:40:49::1;::::0;::::1;::::0;5291:24;;-1:-1:-1;;;;;5291:24:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;5291:24:49;::::1;::::0;5236:40;;5291:24:::1;:::i;4485:217::-:0;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;4565:35:::1;:23;4593:6:::0;4565:27:::1;:35::i;:::-;4610:46;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4610:46:49::1;::::0;::::1;::::0;4671:24;;-1:-1:-1;;;;;4671:24:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;4671:24:49;::::1;::::0;4610:46;;4671:24:::1;:::i;2585:214::-:0;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;2664:34:::1;:22;2691:6:::0;2664:26:::1;:34::i;:::-;2708:45;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2708:45:49::1;::::0;::::1;::::0;2768:24;;-1:-1:-1;;;;;2768:24:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;2768:24:49;::::1;::::0;2708:45;;2768:24:::1;:::i;3217:199::-:0;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;3291:29:::1;:17;3313:6:::0;3291:21:::1;:29::i;:::-;3330:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3330:40:49::1;::::0;::::1;::::0;3385:24;;-1:-1:-1;;;;;3385:24:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;3385:24:49;::::1;::::0;3330:40;;3385:24:::1;:::i;4052:219::-:0;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;4133:36:::1;:21;4162:6:::0;4133:28:::1;:36::i;:::-;4179:44;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4179:44:49::1;::::0;::::1;::::0;4238:26;;-1:-1:-1;;;;;4238:26:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;4238:26:49;::::1;::::0;4179:44;;4238:26:::1;:::i;2321:198:9:-:0;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:9;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:9;;1814:2:54;2401:73:9::1;::::0;::::1;1796:21:54::0;1853:2;1833:18;;;1826:30;1892:34;1872:18;;;1865:62;-1:-1:-1;;;1943:18:54;;;1936:36;1989:19;;2401:73:9::1;1612:402:54::0;2401:73:9::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;3835:211:49:-;1745:10;1734:7;:5;:7::i;:::-;-1:-1:-1;;;;;1734:21:49;;:51;;;-1:-1:-1;1759:26:49;929:10:12;1881:112:49;:::i;1759:26::-;1726:89;;;;-1:-1:-1;;;1726:89:49;;;;;;;:::i;:::-;3913:33:::1;:21;3939:6:::0;3913:25:::1;:33::i;:::-;3956:44;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3956:44:49::1;::::0;::::1;::::0;4015:24;;-1:-1:-1;;;;;4015:24:49;::::1;::::0;-1:-1:-1;;;;;;;;;;;4015:24:49;::::1;::::0;3956:44;;4015:24:::1;:::i;4343:136::-:0;4414:4;4437:35;:23;4465:6;4437:27;:35::i;546:180:50:-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;2221:2:54;617:64:50;;;2203:21:54;2260:2;2240:18;;;2233:30;2299:34;2279:18;;;2272:62;-1:-1:-1;;;2350:18:54;;;2343:31;2391:19;;617:64:50;2019:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;815:200::-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;2623:2:54;903:68:50;;;2605:21:54;2662:2;2642:18;;;2635:30;2701:34;2681:18;;;2674:62;-1:-1:-1;;;2752:18:54;;;2745:32;2794:19;;903:68:50;2421:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;1599:130:9:-;929:10:12;1662:7:9;:5;:7::i;:::-;-1:-1:-1;;;;;1662:23:9;;1654:68;;;;-1:-1:-1;;;1654:68:9;;3026:2:54;1654:68:9;;;3008:21:54;;;3045:18;;;3038:30;3104:34;3084:18;;;3077:62;3156:18;;1654:68:9;2824:356:54;2673:187:9;2765:6;;;-1:-1:-1;;;;;2781:17:9;;;-1:-1:-1;;;;;;2781:17:9;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;296:175:50:-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;3387:2:54;364:63:50;;;3369:21:54;3426:2;3406:18;;;3399:30;3465:33;3445:18;;;3438:61;3516:18;;364:63:50;3185:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;14:286:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:54;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:54:o;705:349::-;907:2;889:21;;;946:2;926:18;;;919:30;-1:-1:-1;;;980:2:54;965:18;;958:55;1045:2;1030:18;;705:349::o;1059:548::-;1171:4;1200:2;1229;1218:9;1211:21;1261:6;1255:13;1304:6;1299:2;1288:9;1284:18;1277:34;1329:1;1339:140;1353:6;1350:1;1347:13;1339:140;;;1448:14;;;1444:23;;1438:30;1414:17;;;1433:2;1410:26;1403:66;1368:10;;1339:140;;;1343:3;1528:1;1523:2;1514:6;1503:9;1499:22;1495:31;1488:42;1598:2;1591;1587:7;1582:2;1574:6;1570:15;1566:29;1555:9;1551:45;1547:54;1539:62;;;;1059:548;;;;:::o",
  "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 '@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol';\n\nimport './Roles.sol';\n\ncontract OwnerRolesUpgradeable is OwnableUpgradeable\n\n {\n    using Roles for Roles.Role;\n\n    event RoleAdded(address indexed _owner, string _role);\n    event RoleRemoved(address indexed _owner, string _role);\n\n    Roles.Role private _ownerAdmin;\n    Roles.Role private _registryAddressSetter;\n    Roles.Role private _complianceSetter;\n    Roles.Role private _claimRegistryManager;\n    Roles.Role private _issuersRegistryManager;\n    Roles.Role private _tokenInfoManager;\n\n    modifier onlyAdmin() {\n        require(owner() == msg.sender || isOwnerAdmin(_msgSender()), 'Role: Sender is NOT Admin');\n        _;\n    }\n\n    /// @dev OwnerAdmin Role _ownerAdmin\n\n    function isOwnerAdmin(address _owner) public view returns (bool) {\n        return _ownerAdmin.has(_owner);\n    }\n\n    function addOwnerAdmin(address _owner) external onlyAdmin {\n        _ownerAdmin.add(_owner);\n        string memory _role = 'OwnerAdmin';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeOwnerAdmin(address _owner) external onlyAdmin {\n        _ownerAdmin.remove(_owner);\n        string memory _role = 'OwnerAdmin';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev RegistryAddressSetter Role _registryAddressSetter\n\n    function isRegistryAddressSetter(address _owner) public view returns (bool) {\n        return _registryAddressSetter.has(_owner);\n    }\n\n    function addRegistryAddressSetter(address _owner) external onlyAdmin {\n        _registryAddressSetter.add(_owner);\n        string memory _role = 'RegistryAddressSetter';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeRegistryAddressSetter(address _owner) external onlyAdmin {\n        _registryAddressSetter.remove(_owner);\n        string memory _role = 'RegistryAddressSetter';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev ComplianceSetter Role _complianceSetter\n\n    function isComplianceSetter(address _owner) public view returns (bool) {\n        return _complianceSetter.has(_owner);\n    }\n\n    function addComplianceSetter(address _owner) external onlyAdmin {\n        _complianceSetter.add(_owner);\n        string memory _role = 'ComplianceSetter';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeComplianceSetter(address _owner) external onlyAdmin {\n        _complianceSetter.remove(_owner);\n        string memory _role = 'ComplianceSetter';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev ClaimRegistryManager Role _claimRegistryManager\n\n    function isClaimRegistryManager(address _owner) public view returns (bool) {\n        return _claimRegistryManager.has(_owner);\n    }\n\n    function addClaimRegistryManager(address _owner) external onlyAdmin {\n        _claimRegistryManager.add(_owner);\n        string memory _role = 'ClaimRegistryManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeClaimRegistryManager(address _owner) external onlyAdmin {\n        _claimRegistryManager.remove(_owner);\n        string memory _role = 'ClaimRegistryManager';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev IssuersRegistryManager Role _issuersRegistryManager\n\n    function isIssuersRegistryManager(address _owner) public view returns (bool) {\n        return _issuersRegistryManager.has(_owner);\n    }\n\n    function addIssuersRegistryManager(address _owner) external onlyAdmin {\n        _issuersRegistryManager.add(_owner);\n        string memory _role = 'IssuersRegistryManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeIssuersRegistryManager(address _owner) external onlyAdmin {\n        _issuersRegistryManager.remove(_owner);\n        string memory _role = 'IssuersRegistryManager';\n        emit RoleRemoved(_owner, _role);\n    }\n\n    /// @dev TokenInfoManager Role _tokenInfoManager\n\n    function isTokenInfoManager(address _owner) public view returns (bool) {\n        return _tokenInfoManager.has(_owner);\n    }\n\n    function addTokenInfoManager(address _owner) external onlyAdmin {\n        _tokenInfoManager.add(_owner);\n        string memory _role = 'TokenInfoManager';\n        emit RoleAdded(_owner, _role);\n    }\n\n    function removeTokenInfoManager(address _owner) external onlyAdmin {\n        _tokenInfoManager.remove(_owner);\n        string memory _role = 'TokenInfoManager';\n        emit RoleRemoved(_owner, _role);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/roles/OwnerRolesUpgradeable.sol",
  "ast": {
    "absolutePath": "project:/contracts/roles/OwnerRolesUpgradeable.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        2350
      ],
      "ContextUpgradeable": [
        2392
      ],
      "Initializable": [
        2107
      ],
      "OwnableUpgradeable": [
        1956
      ],
      "OwnerRolesUpgradeable": [
        11812
      ],
      "Roles": [
        11901
      ]
    },
    "id": 11813,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11395,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:49"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "id": 11396,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 11813,
        "sourceUnit": 1957,
        "src": "1118:75:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/Roles.sol",
        "file": "./Roles.sol",
        "id": 11397,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 11813,
        "sourceUnit": 11902,
        "src": "1195:21:49",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 11398,
              "name": "OwnableUpgradeable",
              "nameLocations": [
                "1252:18:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1956,
              "src": "1252:18:49"
            },
            "id": 11399,
            "nodeType": "InheritanceSpecifier",
            "src": "1252:18:49"
          }
        ],
        "canonicalName": "OwnerRolesUpgradeable",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 11812,
        "linearizedBaseContracts": [
          11812,
          1956,
          2392,
          2107
        ],
        "name": "OwnerRolesUpgradeable",
        "nameLocation": "1227:21:49",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 11403,
            "libraryName": {
              "id": 11400,
              "name": "Roles",
              "nameLocations": [
                "1285:5:49"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11901,
              "src": "1285:5:49"
            },
            "nodeType": "UsingForDirective",
            "src": "1279:27:49",
            "typeName": {
              "id": 11402,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11401,
                "name": "Roles.Role",
                "nameLocations": [
                  "1295:5:49",
                  "1301:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1295:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1295:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "eventSelector": "bfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489",
            "id": 11409,
            "name": "RoleAdded",
            "nameLocation": "1318:9:49",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11405,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1344:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11409,
                  "src": "1328:22:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1328:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11407,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1359:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11409,
                  "src": "1352:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 11406,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1352:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1327:38:49"
            },
            "src": "1312:54:49"
          },
          {
            "anonymous": false,
            "eventSelector": "d211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a",
            "id": 11415,
            "name": "RoleRemoved",
            "nameLocation": "1377:11:49",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11414,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11411,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1405:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11415,
                  "src": "1389:22:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11410,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1389:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11413,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1420:5:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11415,
                  "src": "1413:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 11412,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1413:6:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1388:38:49"
            },
            "src": "1371:56:49"
          },
          {
            "constant": false,
            "id": 11418,
            "mutability": "mutable",
            "name": "_ownerAdmin",
            "nameLocation": "1452:11:49",
            "nodeType": "VariableDeclaration",
            "scope": 11812,
            "src": "1433:30:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 11417,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11416,
                "name": "Roles.Role",
                "nameLocations": [
                  "1433:5:49",
                  "1439:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1433:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1433:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11421,
            "mutability": "mutable",
            "name": "_registryAddressSetter",
            "nameLocation": "1488:22:49",
            "nodeType": "VariableDeclaration",
            "scope": 11812,
            "src": "1469:41:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 11420,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11419,
                "name": "Roles.Role",
                "nameLocations": [
                  "1469:5:49",
                  "1475:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1469:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1469:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11424,
            "mutability": "mutable",
            "name": "_complianceSetter",
            "nameLocation": "1535:17:49",
            "nodeType": "VariableDeclaration",
            "scope": 11812,
            "src": "1516:36:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 11423,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11422,
                "name": "Roles.Role",
                "nameLocations": [
                  "1516:5:49",
                  "1522:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1516:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1516:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11427,
            "mutability": "mutable",
            "name": "_claimRegistryManager",
            "nameLocation": "1577:21:49",
            "nodeType": "VariableDeclaration",
            "scope": 11812,
            "src": "1558:40:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 11426,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11425,
                "name": "Roles.Role",
                "nameLocations": [
                  "1558:5:49",
                  "1564:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1558:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1558:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11430,
            "mutability": "mutable",
            "name": "_issuersRegistryManager",
            "nameLocation": "1623:23:49",
            "nodeType": "VariableDeclaration",
            "scope": 11812,
            "src": "1604:42:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 11429,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11428,
                "name": "Roles.Role",
                "nameLocations": [
                  "1604:5:49",
                  "1610:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1604:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1604:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11433,
            "mutability": "mutable",
            "name": "_tokenInfoManager",
            "nameLocation": "1671:17:49",
            "nodeType": "VariableDeclaration",
            "scope": 11812,
            "src": "1652:36:49",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 11432,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 11431,
                "name": "Roles.Role",
                "nameLocations": [
                  "1652:5:49",
                  "1658:4:49"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1652:10:49"
              },
              "referencedDeclaration": 11820,
              "src": "1652:10:49",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 11450,
              "nodeType": "Block",
              "src": "1716:117:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 11445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 11440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 11436,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1879,
                              "src": "1734:5:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 11437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1734:7:49",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 11438,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1745:3:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1749:6:49",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1745:10:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1734:21:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 11442,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2377,
                                "src": "1772:10:49",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 11443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1772:12:49",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11441,
                            "name": "isOwnerAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11465,
                            "src": "1759:12:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 11444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1759:26:49",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1734:51:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "id": 11446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1787:27:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        },
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        }
                      ],
                      "id": 11435,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1726:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1726:89:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11448,
                  "nodeType": "ExpressionStatement",
                  "src": "1726:89:49"
                },
                {
                  "id": 11449,
                  "nodeType": "PlaceholderStatement",
                  "src": "1825:1:49"
                }
              ]
            },
            "id": 11451,
            "name": "onlyAdmin",
            "nameLocation": "1704:9:49",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 11434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1713:2:49"
            },
            "src": "1695:138:49",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11464,
              "nodeType": "Block",
              "src": "1946:47:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11461,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11454,
                        "src": "1979:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11459,
                        "name": "_ownerAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11418,
                        "src": "1963:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11460,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1975:3:49",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "1963:15:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1963:23:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11458,
                  "id": 11463,
                  "nodeType": "Return",
                  "src": "1956:30:49"
                }
              ]
            },
            "documentation": {
              "id": 11452,
              "nodeType": "StructuredDocumentation",
              "src": "1839:37:49",
              "text": "@dev OwnerAdmin Role _ownerAdmin"
            },
            "functionSelector": "62cdd482",
            "id": 11465,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOwnerAdmin",
            "nameLocation": "1890:12:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11454,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "1911:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11465,
                  "src": "1903:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1903:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1902:16:49"
            },
            "returnParameters": {
              "id": 11458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11457,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11465,
                  "src": "1940:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11456,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1940:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1939:6:49"
            },
            "scope": 11812,
            "src": "1881:112:49",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11487,
              "nodeType": "Block",
              "src": "2057:123:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11475,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11467,
                        "src": "2083:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11472,
                        "name": "_ownerAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11418,
                        "src": "2067:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11474,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2079:3:49",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2067:15:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2067:23:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11477,
                  "nodeType": "ExpressionStatement",
                  "src": "2067:23:49"
                },
                {
                  "assignments": [
                    11479
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11479,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2114:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11487,
                      "src": "2100:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11478,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2100:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11481,
                  "initialValue": {
                    "hexValue": "4f776e657241646d696e",
                    "id": 11480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2122:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_62f6115f5014ec4c7779a85e6faeeed00d502986df89a71123d083cdc949ae20",
                      "typeString": "literal_string \"OwnerAdmin\""
                    },
                    "value": "OwnerAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2100:34:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11483,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11467,
                        "src": "2159:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11484,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11479,
                        "src": "2167:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11482,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11409,
                      "src": "2149:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2149:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11486,
                  "nodeType": "EmitStatement",
                  "src": "2144:29:49"
                }
              ]
            },
            "functionSelector": "934b2da4",
            "id": 11488,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11470,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11469,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2047:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "2047:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "2047:9:49"
              }
            ],
            "name": "addOwnerAdmin",
            "nameLocation": "2008:13:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11468,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11467,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2030:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11488,
                  "src": "2022:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11466,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2022:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2021:16:49"
            },
            "returnParameters": {
              "id": 11471,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2057:0:49"
            },
            "scope": 11812,
            "src": "1999:181:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11510,
              "nodeType": "Block",
              "src": "2247:128:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11498,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11490,
                        "src": "2276:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11495,
                        "name": "_ownerAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11418,
                        "src": "2257:11:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11497,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2269:6:49",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2257:18:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2257:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11500,
                  "nodeType": "ExpressionStatement",
                  "src": "2257:26:49"
                },
                {
                  "assignments": [
                    11502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11502,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2307:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11510,
                      "src": "2293:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11501,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2293:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11504,
                  "initialValue": {
                    "hexValue": "4f776e657241646d696e",
                    "id": 11503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2315:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_62f6115f5014ec4c7779a85e6faeeed00d502986df89a71123d083cdc949ae20",
                      "typeString": "literal_string \"OwnerAdmin\""
                    },
                    "value": "OwnerAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2293:34:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11506,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11490,
                        "src": "2354:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11507,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11502,
                        "src": "2362:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11505,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11415,
                      "src": "2342:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2342:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11509,
                  "nodeType": "EmitStatement",
                  "src": "2337:31:49"
                }
              ]
            },
            "functionSelector": "54b9797f",
            "id": 11511,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11493,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11492,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2237:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "2237:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "2237:9:49"
              }
            ],
            "name": "removeOwnerAdmin",
            "nameLocation": "2195:16:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11490,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2220:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11511,
                  "src": "2212:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11489,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2212:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2211:16:49"
            },
            "returnParameters": {
              "id": 11494,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2247:0:49"
            },
            "scope": 11812,
            "src": "2186:189:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11524,
              "nodeType": "Block",
              "src": "2521:58:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11521,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11514,
                        "src": "2565:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11519,
                        "name": "_registryAddressSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11421,
                        "src": "2538:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11520,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2561:3:49",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "2538:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2538:34:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11518,
                  "id": 11523,
                  "nodeType": "Return",
                  "src": "2531:41:49"
                }
              ]
            },
            "documentation": {
              "id": 11512,
              "nodeType": "StructuredDocumentation",
              "src": "2381:59:49",
              "text": "@dev RegistryAddressSetter Role _registryAddressSetter"
            },
            "functionSelector": "82870937",
            "id": 11525,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRegistryAddressSetter",
            "nameLocation": "2454:23:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11515,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11514,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2486:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11525,
                  "src": "2478:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2478:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2477:16:49"
            },
            "returnParameters": {
              "id": 11518,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11517,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11525,
                  "src": "2515:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11516,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2514:6:49"
            },
            "scope": 11812,
            "src": "2445:134:49",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11547,
              "nodeType": "Block",
              "src": "2654:145:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11535,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11527,
                        "src": "2691:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11532,
                        "name": "_registryAddressSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11421,
                        "src": "2664:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11534,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2687:3:49",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2664:26:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2664:34:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11537,
                  "nodeType": "ExpressionStatement",
                  "src": "2664:34:49"
                },
                {
                  "assignments": [
                    11539
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11539,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2722:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11547,
                      "src": "2708:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11538,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2708:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11541,
                  "initialValue": {
                    "hexValue": "526567697374727941646472657373536574746572",
                    "id": 11540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2730:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d36b1bd9a1ba0efa6f97342f527f05c039b454f231dbfda5f7154cab5ce868eb",
                      "typeString": "literal_string \"RegistryAddressSetter\""
                    },
                    "value": "RegistryAddressSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2708:45:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11543,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11527,
                        "src": "2778:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11544,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11539,
                        "src": "2786:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11542,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11409,
                      "src": "2768:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2768:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11546,
                  "nodeType": "EmitStatement",
                  "src": "2763:29:49"
                }
              ]
            },
            "functionSelector": "ae5aaa3b",
            "id": 11548,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11530,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11529,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2644:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "2644:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "2644:9:49"
              }
            ],
            "name": "addRegistryAddressSetter",
            "nameLocation": "2594:24:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11528,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11527,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2627:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11548,
                  "src": "2619:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11526,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2619:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2618:16:49"
            },
            "returnParameters": {
              "id": 11531,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2654:0:49"
            },
            "scope": 11812,
            "src": "2585:214:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11570,
              "nodeType": "Block",
              "src": "2877:150:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11558,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11550,
                        "src": "2917:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11555,
                        "name": "_registryAddressSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11421,
                        "src": "2887:22:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11557,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2910:6:49",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2887:29:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2887:37:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11560,
                  "nodeType": "ExpressionStatement",
                  "src": "2887:37:49"
                },
                {
                  "assignments": [
                    11562
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11562,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2948:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11570,
                      "src": "2934:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11561,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2934:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11564,
                  "initialValue": {
                    "hexValue": "526567697374727941646472657373536574746572",
                    "id": 11563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2956:23:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d36b1bd9a1ba0efa6f97342f527f05c039b454f231dbfda5f7154cab5ce868eb",
                      "typeString": "literal_string \"RegistryAddressSetter\""
                    },
                    "value": "RegistryAddressSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2934:45:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11566,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11550,
                        "src": "3006:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11567,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11562,
                        "src": "3014:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11565,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11415,
                      "src": "2994:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2994:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11569,
                  "nodeType": "EmitStatement",
                  "src": "2989:31:49"
                }
              ]
            },
            "functionSelector": "039ec2cd",
            "id": 11571,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11553,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11552,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2867:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "2867:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "2867:9:49"
              }
            ],
            "name": "removeRegistryAddressSetter",
            "nameLocation": "2814:27:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11551,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11550,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2850:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11571,
                  "src": "2842:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11549,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2842:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2841:16:49"
            },
            "returnParameters": {
              "id": 11554,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2877:0:49"
            },
            "scope": 11812,
            "src": "2805:222:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11584,
              "nodeType": "Block",
              "src": "3158:53:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11581,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11574,
                        "src": "3197:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11579,
                        "name": "_complianceSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11424,
                        "src": "3175:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11580,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3193:3:49",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3175:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3175:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11578,
                  "id": 11583,
                  "nodeType": "Return",
                  "src": "3168:36:49"
                }
              ]
            },
            "documentation": {
              "id": 11572,
              "nodeType": "StructuredDocumentation",
              "src": "3033:49:49",
              "text": "@dev ComplianceSetter Role _complianceSetter"
            },
            "functionSelector": "3ba7c75e",
            "id": 11585,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isComplianceSetter",
            "nameLocation": "3096:18:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11574,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3123:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "3115:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3115:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3114:16:49"
            },
            "returnParameters": {
              "id": 11578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11577,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "3152:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11576,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3152:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3151:6:49"
            },
            "scope": 11812,
            "src": "3087:124:49",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11607,
              "nodeType": "Block",
              "src": "3281:135:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11595,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11587,
                        "src": "3313:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11592,
                        "name": "_complianceSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11424,
                        "src": "3291:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11594,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3309:3:49",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3291:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3291:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11597,
                  "nodeType": "ExpressionStatement",
                  "src": "3291:29:49"
                },
                {
                  "assignments": [
                    11599
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11599,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3344:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11607,
                      "src": "3330:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11598,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3330:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11601,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e6365536574746572",
                    "id": 11600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3352:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ed6524002f16c16bbf414c8294754fb908e5ee1ecc0465a5e1e68a1a54c295bf",
                      "typeString": "literal_string \"ComplianceSetter\""
                    },
                    "value": "ComplianceSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3330:40:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11603,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11587,
                        "src": "3395:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11604,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11599,
                        "src": "3403:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11602,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11409,
                      "src": "3385:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3385:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11606,
                  "nodeType": "EmitStatement",
                  "src": "3380:29:49"
                }
              ]
            },
            "functionSelector": "ce4bdac7",
            "id": 11608,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11590,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11589,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3271:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "3271:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "3271:9:49"
              }
            ],
            "name": "addComplianceSetter",
            "nameLocation": "3226:19:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11587,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3254:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11608,
                  "src": "3246:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11586,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3246:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3245:16:49"
            },
            "returnParameters": {
              "id": 11591,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3281:0:49"
            },
            "scope": 11812,
            "src": "3217:199:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11630,
              "nodeType": "Block",
              "src": "3489:140:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11618,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11610,
                        "src": "3524:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11615,
                        "name": "_complianceSetter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11424,
                        "src": "3499:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11617,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3517:6:49",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "3499:24:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3499:32:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11620,
                  "nodeType": "ExpressionStatement",
                  "src": "3499:32:49"
                },
                {
                  "assignments": [
                    11622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11622,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3555:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11630,
                      "src": "3541:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11621,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3541:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11624,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e6365536574746572",
                    "id": 11623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3563:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_ed6524002f16c16bbf414c8294754fb908e5ee1ecc0465a5e1e68a1a54c295bf",
                      "typeString": "literal_string \"ComplianceSetter\""
                    },
                    "value": "ComplianceSetter"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3541:40:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11626,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11610,
                        "src": "3608:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11627,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11622,
                        "src": "3616:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11625,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11415,
                      "src": "3596:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3596:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11629,
                  "nodeType": "EmitStatement",
                  "src": "3591:31:49"
                }
              ]
            },
            "functionSelector": "40522554",
            "id": 11631,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11613,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11612,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3479:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "3479:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "3479:9:49"
              }
            ],
            "name": "removeComplianceSetter",
            "nameLocation": "3431:22:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11610,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3462:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11631,
                  "src": "3454:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11609,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3454:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3453:16:49"
            },
            "returnParameters": {
              "id": 11614,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3489:0:49"
            },
            "scope": 11812,
            "src": "3422:207:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11644,
              "nodeType": "Block",
              "src": "3772:57:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11641,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11634,
                        "src": "3815:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11639,
                        "name": "_claimRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11427,
                        "src": "3789:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11640,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3811:3:49",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3789:25:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3789:33:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11638,
                  "id": 11643,
                  "nodeType": "Return",
                  "src": "3782:40:49"
                }
              ]
            },
            "documentation": {
              "id": 11632,
              "nodeType": "StructuredDocumentation",
              "src": "3635:57:49",
              "text": "@dev ClaimRegistryManager Role _claimRegistryManager"
            },
            "functionSelector": "3c734ce8",
            "id": 11645,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isClaimRegistryManager",
            "nameLocation": "3706:22:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11634,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3737:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11645,
                  "src": "3729:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11633,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3729:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3728:16:49"
            },
            "returnParameters": {
              "id": 11638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11637,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11645,
                  "src": "3766:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11636,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3766:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3765:6:49"
            },
            "scope": 11812,
            "src": "3697:132:49",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11667,
              "nodeType": "Block",
              "src": "3903:143:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11655,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11647,
                        "src": "3939:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11652,
                        "name": "_claimRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11427,
                        "src": "3913:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11654,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3935:3:49",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3913:25:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3913:33:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11657,
                  "nodeType": "ExpressionStatement",
                  "src": "3913:33:49"
                },
                {
                  "assignments": [
                    11659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11659,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3970:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11667,
                      "src": "3956:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11658,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3956:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11661,
                  "initialValue": {
                    "hexValue": "436c61696d52656769737472794d616e61676572",
                    "id": 11660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3978:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_804b13390a9f6375b6730e205cffe19efc5e8de8596f5fb70d3a146015955e7d",
                      "typeString": "literal_string \"ClaimRegistryManager\""
                    },
                    "value": "ClaimRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3956:44:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11663,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11647,
                        "src": "4025:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11664,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11659,
                        "src": "4033:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11662,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11409,
                      "src": "4015:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4015:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11666,
                  "nodeType": "EmitStatement",
                  "src": "4010:29:49"
                }
              ]
            },
            "functionSelector": "faed696a",
            "id": 11668,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11650,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11649,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3893:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "3893:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "3893:9:49"
              }
            ],
            "name": "addClaimRegistryManager",
            "nameLocation": "3844:23:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11647,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3876:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11668,
                  "src": "3868:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11646,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3868:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3867:16:49"
            },
            "returnParameters": {
              "id": 11651,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3903:0:49"
            },
            "scope": 11812,
            "src": "3835:211:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11690,
              "nodeType": "Block",
              "src": "4123:148:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11678,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11670,
                        "src": "4162:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11675,
                        "name": "_claimRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11427,
                        "src": "4133:21:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11677,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4155:6:49",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "4133:28:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4133:36:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11680,
                  "nodeType": "ExpressionStatement",
                  "src": "4133:36:49"
                },
                {
                  "assignments": [
                    11682
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11682,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4193:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11690,
                      "src": "4179:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11681,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4179:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11684,
                  "initialValue": {
                    "hexValue": "436c61696d52656769737472794d616e61676572",
                    "id": 11683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4201:22:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_804b13390a9f6375b6730e205cffe19efc5e8de8596f5fb70d3a146015955e7d",
                      "typeString": "literal_string \"ClaimRegistryManager\""
                    },
                    "value": "ClaimRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4179:44:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11686,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11670,
                        "src": "4250:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11687,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11682,
                        "src": "4258:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11685,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11415,
                      "src": "4238:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4238:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11689,
                  "nodeType": "EmitStatement",
                  "src": "4233:31:49"
                }
              ]
            },
            "functionSelector": "e110255b",
            "id": 11691,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11673,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11672,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4113:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "4113:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "4113:9:49"
              }
            ],
            "name": "removeClaimRegistryManager",
            "nameLocation": "4061:26:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11670,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4096:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11691,
                  "src": "4088:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11669,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4088:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4087:16:49"
            },
            "returnParameters": {
              "id": 11674,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4123:0:49"
            },
            "scope": 11812,
            "src": "4052:219:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11704,
              "nodeType": "Block",
              "src": "4420:59:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11701,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11694,
                        "src": "4465:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11699,
                        "name": "_issuersRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11430,
                        "src": "4437:23:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11700,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4461:3:49",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "4437:27:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4437:35:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11698,
                  "id": 11703,
                  "nodeType": "Return",
                  "src": "4430:42:49"
                }
              ]
            },
            "documentation": {
              "id": 11692,
              "nodeType": "StructuredDocumentation",
              "src": "4277:61:49",
              "text": "@dev IssuersRegistryManager Role _issuersRegistryManager"
            },
            "functionSelector": "ff806311",
            "id": 11705,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isIssuersRegistryManager",
            "nameLocation": "4352:24:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11694,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4385:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11705,
                  "src": "4377:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11693,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4377:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4376:16:49"
            },
            "returnParameters": {
              "id": 11698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11697,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11705,
                  "src": "4414:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11696,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4414:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4413:6:49"
            },
            "scope": 11812,
            "src": "4343:136:49",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11727,
              "nodeType": "Block",
              "src": "4555:147:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11715,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11707,
                        "src": "4593:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11712,
                        "name": "_issuersRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11430,
                        "src": "4565:23:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11714,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4589:3:49",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "4565:27:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4565:35:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11717,
                  "nodeType": "ExpressionStatement",
                  "src": "4565:35:49"
                },
                {
                  "assignments": [
                    11719
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11719,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4624:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11727,
                      "src": "4610:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11718,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4610:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11721,
                  "initialValue": {
                    "hexValue": "4973737565727352656769737472794d616e61676572",
                    "id": 11720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4632:24:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_77093c1b34155b4195fe707082d738160fb764b2c3da96821f50059287ecb3d4",
                      "typeString": "literal_string \"IssuersRegistryManager\""
                    },
                    "value": "IssuersRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4610:46:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11723,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11707,
                        "src": "4681:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11724,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11719,
                        "src": "4689:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11722,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11409,
                      "src": "4671:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4671:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11726,
                  "nodeType": "EmitStatement",
                  "src": "4666:29:49"
                }
              ]
            },
            "functionSelector": "ac95fc91",
            "id": 11728,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11710,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11709,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4545:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "4545:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "4545:9:49"
              }
            ],
            "name": "addIssuersRegistryManager",
            "nameLocation": "4494:25:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11707,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4528:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11728,
                  "src": "4520:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11706,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4520:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4519:16:49"
            },
            "returnParameters": {
              "id": 11711,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4555:0:49"
            },
            "scope": 11812,
            "src": "4485:217:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11750,
              "nodeType": "Block",
              "src": "4781:152:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11738,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11730,
                        "src": "4822:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11735,
                        "name": "_issuersRegistryManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11430,
                        "src": "4791:23:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11737,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4815:6:49",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "4791:30:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4791:38:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11740,
                  "nodeType": "ExpressionStatement",
                  "src": "4791:38:49"
                },
                {
                  "assignments": [
                    11742
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11742,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4853:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11750,
                      "src": "4839:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11741,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4839:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11744,
                  "initialValue": {
                    "hexValue": "4973737565727352656769737472794d616e61676572",
                    "id": 11743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4861:24:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_77093c1b34155b4195fe707082d738160fb764b2c3da96821f50059287ecb3d4",
                      "typeString": "literal_string \"IssuersRegistryManager\""
                    },
                    "value": "IssuersRegistryManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4839:46:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11746,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11730,
                        "src": "4912:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11747,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11742,
                        "src": "4920:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11745,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11415,
                      "src": "4900:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4900:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11749,
                  "nodeType": "EmitStatement",
                  "src": "4895:31:49"
                }
              ]
            },
            "functionSelector": "6ff7bff7",
            "id": 11751,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11733,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11732,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4771:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "4771:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "4771:9:49"
              }
            ],
            "name": "removeIssuersRegistryManager",
            "nameLocation": "4717:28:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11730,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4754:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11751,
                  "src": "4746:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11729,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4746:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4745:16:49"
            },
            "returnParameters": {
              "id": 11734,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4781:0:49"
            },
            "scope": 11812,
            "src": "4708:225:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11764,
              "nodeType": "Block",
              "src": "5064:53:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11761,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11754,
                        "src": "5103:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11759,
                        "name": "_tokenInfoManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11433,
                        "src": "5081:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11760,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5099:3:49",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "5081:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 11762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5081:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 11758,
                  "id": 11763,
                  "nodeType": "Return",
                  "src": "5074:36:49"
                }
              ]
            },
            "documentation": {
              "id": 11752,
              "nodeType": "StructuredDocumentation",
              "src": "4939:49:49",
              "text": "@dev TokenInfoManager Role _tokenInfoManager"
            },
            "functionSelector": "2447e50b",
            "id": 11765,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTokenInfoManager",
            "nameLocation": "5002:18:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11754,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5029:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11765,
                  "src": "5021:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11753,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5021:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5020:16:49"
            },
            "returnParameters": {
              "id": 11758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11757,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 11765,
                  "src": "5058:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 11756,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5058:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5057:6:49"
            },
            "scope": 11812,
            "src": "4993:124:49",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11787,
              "nodeType": "Block",
              "src": "5187:135:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11775,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11767,
                        "src": "5219:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11772,
                        "name": "_tokenInfoManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11433,
                        "src": "5197:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11774,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5215:3:49",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "5197:21:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5197:29:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11777,
                  "nodeType": "ExpressionStatement",
                  "src": "5197:29:49"
                },
                {
                  "assignments": [
                    11779
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11779,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5250:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11787,
                      "src": "5236:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11778,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5236:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11781,
                  "initialValue": {
                    "hexValue": "546f6b656e496e666f4d616e61676572",
                    "id": 11780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5258:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_df0fbeba9f692191bef132c5367fafb34e1a803f989261a1e0644aab540e8e9d",
                      "typeString": "literal_string \"TokenInfoManager\""
                    },
                    "value": "TokenInfoManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5236:40:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11783,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11767,
                        "src": "5301:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11784,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11779,
                        "src": "5309:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11782,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11409,
                      "src": "5291:9:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5291:24:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11786,
                  "nodeType": "EmitStatement",
                  "src": "5286:29:49"
                }
              ]
            },
            "functionSelector": "94e69f1b",
            "id": 11788,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11770,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11769,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5177:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "5177:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "5177:9:49"
              }
            ],
            "name": "addTokenInfoManager",
            "nameLocation": "5132:19:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11767,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5160:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11788,
                  "src": "5152:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11766,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5152:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5151:16:49"
            },
            "returnParameters": {
              "id": 11771,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5187:0:49"
            },
            "scope": 11812,
            "src": "5123:199:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 11810,
              "nodeType": "Block",
              "src": "5395:140:49",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 11798,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11790,
                        "src": "5430:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 11795,
                        "name": "_tokenInfoManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11433,
                        "src": "5405:17:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 11797,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5423:6:49",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "5405:24:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 11799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5405:32:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11800,
                  "nodeType": "ExpressionStatement",
                  "src": "5405:32:49"
                },
                {
                  "assignments": [
                    11802
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11802,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5461:5:49",
                      "nodeType": "VariableDeclaration",
                      "scope": 11810,
                      "src": "5447:19:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 11801,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5447:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 11804,
                  "initialValue": {
                    "hexValue": "546f6b656e496e666f4d616e61676572",
                    "id": 11803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5469:18:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_df0fbeba9f692191bef132c5367fafb34e1a803f989261a1e0644aab540e8e9d",
                      "typeString": "literal_string \"TokenInfoManager\""
                    },
                    "value": "TokenInfoManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5447:40:49"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 11806,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11790,
                        "src": "5514:6:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 11807,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11802,
                        "src": "5522:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 11805,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11415,
                      "src": "5502:11:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 11808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5502:26:49",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11809,
                  "nodeType": "EmitStatement",
                  "src": "5497:31:49"
                }
              ]
            },
            "functionSelector": "882fc6ca",
            "id": 11811,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 11793,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 11792,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5385:9:49"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 11451,
                  "src": "5385:9:49"
                },
                "nodeType": "ModifierInvocation",
                "src": "5385:9:49"
              }
            ],
            "name": "removeTokenInfoManager",
            "nameLocation": "5337:22:49",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11791,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11790,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "5368:6:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 11811,
                  "src": "5360:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11789,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5360:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5359:16:49"
            },
            "returnParameters": {
              "id": 11794,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5395:0:49"
            },
            "scope": 11812,
            "src": "5328:207:49",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 11813,
        "src": "1218:4319:49",
        "usedErrors": []
      }
    ],
    "src": "1093:4445:49"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.405Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "isClaimRegistryManager(address)": {
        "details": "ClaimRegistryManager Role _claimRegistryManager"
      },
      "isComplianceSetter(address)": {
        "details": "ComplianceSetter Role _complianceSetter"
      },
      "isIssuersRegistryManager(address)": {
        "details": "IssuersRegistryManager Role _issuersRegistryManager"
      },
      "isOwnerAdmin(address)": {
        "details": "OwnerAdmin Role _ownerAdmin"
      },
      "isRegistryAddressSetter(address)": {
        "details": "RegistryAddressSetter Role _registryAddressSetter"
      },
      "isTokenInfoManager(address)": {
        "details": "TokenInfoManager Role _tokenInfoManager"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}