{
  "contractName": "IdentityWithOwner",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "BlacklistRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ContractRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "IdentityAdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "IdentityAdminRemoved",
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "WhitelistedRemoved",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "addrToDID",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "authenticationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dateAdded",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dateAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "didHashToAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isPauser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "scheme",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeIdentityAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceIdentityAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renouncePauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "setAvatar",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelistedContracts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "whitelistedCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "setAuthenticationPeriod",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "authenticate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "did",
          "type": "string"
        }
      ],
      "name": "addWhitelistedWithDID",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceWhitelisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "lastAuthenticated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addBlacklisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeBlacklisted",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isDAOContract",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isBlacklisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"BlacklistAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"BlacklistRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ContractAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ContractRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IdentityAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IdentityAdminRemoved\",\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"WhitelistedAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"WhitelistedRemoved\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addBlacklisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"did\",\"type\":\"string\"}],\"name\":\"addWhitelistedWithDID\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addrToDID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"authenticate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authenticationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"dateAdded\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"dateAuthenticated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"didHashToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isDAOContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"scheme\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"lastAuthenticated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeBlacklisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeIdentityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceIdentityAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceWhitelisted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"setAuthenticationPeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"setAvatar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistedContracts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"addIdentityAdmin(address)\":{\"details\":\"Adds a identity admin account. Is only callable by owner.\",\"params\":{\"account\":\"Address to be added\"},\"return\":\"true if successful\"},\"isIdentityAdmin(address)\":{\"details\":\"Checks if account is identity admin\",\"params\":{\"account\":\"Account to check\"},\"return\":\"Boolean indicating if account is identity admin\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"isRegistered()\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"isRegistered(address)\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"paused()\":{\"return\":\"true if the contract is paused, false otherwise.\"},\"removeIdentityAdmin(address)\":{\"details\":\"Removes a identity admin account. Is only callable by owner.\",\"params\":{\"account\":\"Address to be removed\"},\"return\":\"true if successful\"},\"renounceIdentityAdmin()\":{\"details\":\"Allows an admin to renounce their role\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"setAvatar(address)\":{\"details\":\"Function to set a new avatar and controller for scheme can only be done by owner of scheme\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"}}},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityWithOwner.sol\":\"IdentityWithOwner\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityWithOwner.sol\":{\"keccak256\":\"0x16b2b5cf6bf191049227aef880163073403e73b0182d78147c8b7eedd87374af\",\"urls\":[\"bzz-raw://637c377be8f2af392e7ecca3e91775cf062ba84f46350ee0a612215be78f4001\",\"dweb:/ipfs/QmacnvHDZ4z9SQpY8XUKUxgvC9pppJwAfw2GUchUeZLPA1\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x6080604052600380546001600160a01b031916905560006009819055600a55600e600b553480156200003057600080fd5b5060405162001e3138038062001e31833981810160405260208110156200005657600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911690829060008051602062001e11833981519152908290a3620000a5336001600160e01b03620001b416565b600280546001600160a01b0319166001600160a01b03838116919091179182905516156200016a57600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011c57600080fd5b505afa15801562000131573d6000803e3d6000fd5b505050506040513d60208110156200014857600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555b506200017f336001600160e01b036200020616565b6005805460ff191690556001600160a01b03811615620001ad57620001ad816001600160e01b036200025816565b506200038a565b620001cf8160016200028c60201b620014d31790919060201c565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b620002218160046200028c60201b620014d31790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6200026b6001600160e01b03620002e516565b6200027557600080fd5b62000289816001600160e01b03620002f616565b50565b6001600160a01b038116620002a057600080fd5b620002b582826001600160e01b036200035416565b15620002c057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000546001600160a01b0316331490565b6001600160a01b0381166200030a57600080fd5b600080546040516001600160a01b038085169392169160008051602062001e1183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166200036a57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611a77806200039a6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636ef8d66d11610130578063c3c5a547116100b8578063e5ecaf591161007c578063e5ecaf59146106d7578063f2fde38b146106fd578063f7d7f9cc14610723578063fe575a8714610749578063fff930d41461076f57610232565b8063c3c5a54714610637578063c6a276c21461065d578063c73cc4ae14610683578063d6cd9473146106a9578063e1e360ba146106b157610232565b80638da5cb5b116100ff5780638da5cb5b146105f15780638f32d59b146105f9578063b2a1de2214610601578063b30f7e7f14610609578063c375c2ef1461061157610232565b80636ef8d66d146105b3578063715018a6146105bb57806382dc1ec4146105c35780638456cb59146105e957610232565b80632bc298ac116101be57806346fbf68e1161018257806346fbf68e1461048b57806354f9f7a3146104b15780635c975abb1461054c5780635f539d691461055457806367c759371461057a57610232565b80632bc298ac146103f75780632ef1afc91461042f57806331b376e2146104555780633af32abf1461045d5780633f4ba83a1461048357610232565b8063188efc1611610205578063188efc16146102b35780631b027099146102d9578063223668441461038f578063291d9549146103ab5780632b32e46c146103d157610232565b8063086cfca81461023757806308e0d29d1461025f5780630f10a8b81461028557806310154bad1461028d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b031661078c565b005b61025d6004803603602081101561027557600080fd5b50356001600160a01b0316610847565b61025d610908565b61025d600480360360208110156102a357600080fd5b50356001600160a01b0316610913565b61025d600480360360208110156102c957600080fd5b50356001600160a01b03166109c4565b61025d600480360360408110156102ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561031a57600080fd5b82018360208201111561032c57600080fd5b8035906020019184600183028401116401000000008311171561034e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ab1945050505050565b610397610b64565b604080519115158252519081900360200190f35b61025d600480360360208110156103c157600080fd5b50356001600160a01b0316610b75565b610397600480360360208110156103e757600080fd5b50356001600160a01b0316610c23565b61041d6004803603602081101561040d57600080fd5b50356001600160a01b0316610c48565b60408051918252519081900360200190f35b61041d6004803603602081101561044557600080fd5b50356001600160a01b0316610c5a565b61041d610c6c565b6103976004803603602081101561047357600080fd5b50356001600160a01b0316610c72565b61025d610cd2565b610397600480360360208110156104a157600080fd5b50356001600160a01b0316610d32565b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610d4b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105115781810151838201526020016104f9565b50505050905090810190601f16801561053e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610397610de6565b61025d6004803603602081101561056a57600080fd5b50356001600160a01b0316610def565b6105976004803603602081101561059057600080fd5b5035610f3f565b604080516001600160a01b039092168252519081900360200190f35b61025d610f5a565b61025d610f63565b61025d600480360360208110156105d957600080fd5b50356001600160a01b0316610fbe565b61025d610fd9565b61059761103d565b61039761104c565b61041d61105d565b61041d611063565b61025d6004803603602081101561062757600080fd5b50356001600160a01b0316611069565b6103976004803603602081101561064d57600080fd5b50356001600160a01b031661115f565b61025d6004803603602081101561067357600080fd5b50356001600160a01b0316611243565b6103976004803603602081101561069957600080fd5b50356001600160a01b0316611330565b61025d611343565b61041d600480360360208110156106c757600080fd5b50356001600160a01b031661135c565b610397600480360360208110156106ed57600080fd5b50356001600160a01b0316611377565b61025d6004803603602081101561071357600080fd5b50356001600160a01b031661138a565b6103976004803603602081101561073957600080fd5b50356001600160a01b03166113a4565b6103976004803603602081101561075f57600080fd5b50356001600160a01b03166113c0565b61025d6004803603602081101561078557600080fd5b50356113d3565b61079461104c565b61079d57600080fd5b600280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550565b61084f610b64565b61088e576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61089733611377565b6108dc576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156108ec57600080fd5b6001600160a01b03166000908152600c60205260409020429055565b610911336113f9565b565b61091b610b64565b61095a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61096333611377565b6109a8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156109b857600080fd5b6109c181611441565b50565b6109cc610b64565b610a0b576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610a1433611377565b610a59576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610a6957600080fd5b610a7a60068263ffffffff6114d316565b6040516001600160a01b038216907f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b87896790600090a250565b610ab9610b64565b610af8576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610b0133611377565b610b46576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610b5657600080fd5b610b60828261151f565b5050565b6000610b6f3061115f565b90505b90565b610b7d610b64565b610bbc576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610bc533611377565b610c0a576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610c1a57600080fd5b6109c1816115ed565b6000610c2d61104c565b610c3657600080fd5b610c3f8261176c565b5060015b919050565b600d6020526000908152604090205481565b600c6020526000908152604090205481565b600b5481565b6001600160a01b0381166000908152600c602052604081205481906201518090610ca390429063ffffffff6117b416565b81610caa57fe5b049050600b548111158015610ccb5750610ccb60078463ffffffff6117c916565b9392505050565b610cdb33610d32565b610ce457600080fd5b60055460ff16610cf357600080fd5b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610d4560048363ffffffff6117c916565b92915050565b600e6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b505050505081565b60055460ff1690565b610df7610b64565b610e36576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610e3f33611377565b610e84576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610e9457600080fd5b610e9d816117fe565b610eee576040805162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e747261637400604482015290519081900360640190fd5b610eff60088263ffffffff6114d316565b610f0881611441565b6040516001600160a01b038216907f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20590600090a250565b600f602052600090815260409020546001600160a01b031681565b61091133611804565b610f6b61104c565b610f7457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fc733610d32565b610fd057600080fd5b6109c18161184c565b610fe233610d32565b610feb57600080fd5b60055460ff1615610ffb57600080fd5b6005805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60095481565b600a5481565b611071610b64565b6110b0576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b6110b933611377565b6110fe576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff161561110e57600080fd5b61111f60088263ffffffff61189416565b611128816115ed565b6040516001600160a01b038216907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a250565b6002546000906001600160a01b03166111b3576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60035460025460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b15801561120b57600080fd5b505afa15801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b5051610c3f57506000610c43565b61124b610b64565b61128a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61129333611377565b6112d8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156112e857600080fd5b6112f960068263ffffffff61189416565b6040516001600160a01b038216907f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde890600090a250565b6000610d4560088363ffffffff6117c916565b60055460ff161561135357600080fd5b610911336115ed565b6001600160a01b03166000908152600c602052604090205490565b6000610d4560018363ffffffff6117c916565b61139261104c565b61139b57600080fd5b6109c1816118dc565b60006113ae61104c565b6113b757600080fd5b610c3f826113f9565b6000610d4560068363ffffffff6117c916565b6113db61104c565b6113e457600080fd5b60055460ff16156113f457600080fd5b600b55565b61140a60018263ffffffff61189416565b6040516001600160a01b038216907f869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad0590600090a250565b61145260078263ffffffff6114d316565b6009805460010190556001600160a01b0381166000908152600d602090815260408083204290819055600c9092529091205561148d816117fe565b1561149c57600a805460010190555b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6001600160a01b0381166114e657600080fd5b6114f082826117c9565b156114fa57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b80516020808301919091206000818152600f9092526040909120546001600160a01b03161561158e576040805162461bcd60e51b815260206004820152601660248201527511125108185b1c9958591e481c9959da5cdd195c995960521b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e6020908152604090912083516115b79285019061194a565b506000818152600f6020526040902080546001600160a01b0319166001600160a01b0385161790556115e883611441565b505050565b6115fe60078263ffffffff61189416565b600980546000190190556001600160a01b0381166000908152600c602052604081205561162a816117fe565b1561163a57600a80546000190190555b6001600160a01b0381166000908152600e602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152600c83526040808220829055600e9093529182209596509461171b9450925090506119c8565b6000818152600f602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a2505050565b61177d60018263ffffffff6114d316565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b6000828211156117c357600080fd5b50900390565b60006001600160a01b0382166117de57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3b151590565b61181560048263ffffffff61189416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61185d60048263ffffffff6114d316565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166118a757600080fd5b6118b182826117c9565b6118ba57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166118ef57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061198b57805160ff19168380011785556119b8565b828001600101855582156119b8579182015b828111156119b857825182559160200191906001019061199d565b506119c4929150611a08565b5090565b50805460018160011615610100020316600290046000825580601f106119ee57506109c1565b601f0160209004906000526020600020908101906109c191905b610b7291905b808211156119c45760008155600101611a0e56fe536368656d65206973206e6f7420726567697374657265640000000000000000a265627a7a723158203848b9dbc03a486444d7613ed99027bcd93d6f206eb021a0c49c8702a52c973264736f6c634300051000328be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636ef8d66d11610130578063c3c5a547116100b8578063e5ecaf591161007c578063e5ecaf59146106d7578063f2fde38b146106fd578063f7d7f9cc14610723578063fe575a8714610749578063fff930d41461076f57610232565b8063c3c5a54714610637578063c6a276c21461065d578063c73cc4ae14610683578063d6cd9473146106a9578063e1e360ba146106b157610232565b80638da5cb5b116100ff5780638da5cb5b146105f15780638f32d59b146105f9578063b2a1de2214610601578063b30f7e7f14610609578063c375c2ef1461061157610232565b80636ef8d66d146105b3578063715018a6146105bb57806382dc1ec4146105c35780638456cb59146105e957610232565b80632bc298ac116101be57806346fbf68e1161018257806346fbf68e1461048b57806354f9f7a3146104b15780635c975abb1461054c5780635f539d691461055457806367c759371461057a57610232565b80632bc298ac146103f75780632ef1afc91461042f57806331b376e2146104555780633af32abf1461045d5780633f4ba83a1461048357610232565b8063188efc1611610205578063188efc16146102b35780631b027099146102d9578063223668441461038f578063291d9549146103ab5780632b32e46c146103d157610232565b8063086cfca81461023757806308e0d29d1461025f5780630f10a8b81461028557806310154bad1461028d575b600080fd5b61025d6004803603602081101561024d57600080fd5b50356001600160a01b031661078c565b005b61025d6004803603602081101561027557600080fd5b50356001600160a01b0316610847565b61025d610908565b61025d600480360360208110156102a357600080fd5b50356001600160a01b0316610913565b61025d600480360360208110156102c957600080fd5b50356001600160a01b03166109c4565b61025d600480360360408110156102ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561031a57600080fd5b82018360208201111561032c57600080fd5b8035906020019184600183028401116401000000008311171561034e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ab1945050505050565b610397610b64565b604080519115158252519081900360200190f35b61025d600480360360208110156103c157600080fd5b50356001600160a01b0316610b75565b610397600480360360208110156103e757600080fd5b50356001600160a01b0316610c23565b61041d6004803603602081101561040d57600080fd5b50356001600160a01b0316610c48565b60408051918252519081900360200190f35b61041d6004803603602081101561044557600080fd5b50356001600160a01b0316610c5a565b61041d610c6c565b6103976004803603602081101561047357600080fd5b50356001600160a01b0316610c72565b61025d610cd2565b610397600480360360208110156104a157600080fd5b50356001600160a01b0316610d32565b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610d4b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105115781810151838201526020016104f9565b50505050905090810190601f16801561053e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610397610de6565b61025d6004803603602081101561056a57600080fd5b50356001600160a01b0316610def565b6105976004803603602081101561059057600080fd5b5035610f3f565b604080516001600160a01b039092168252519081900360200190f35b61025d610f5a565b61025d610f63565b61025d600480360360208110156105d957600080fd5b50356001600160a01b0316610fbe565b61025d610fd9565b61059761103d565b61039761104c565b61041d61105d565b61041d611063565b61025d6004803603602081101561062757600080fd5b50356001600160a01b0316611069565b6103976004803603602081101561064d57600080fd5b50356001600160a01b031661115f565b61025d6004803603602081101561067357600080fd5b50356001600160a01b0316611243565b6103976004803603602081101561069957600080fd5b50356001600160a01b0316611330565b61025d611343565b61041d600480360360208110156106c757600080fd5b50356001600160a01b031661135c565b610397600480360360208110156106ed57600080fd5b50356001600160a01b0316611377565b61025d6004803603602081101561071357600080fd5b50356001600160a01b031661138a565b6103976004803603602081101561073957600080fd5b50356001600160a01b03166113a4565b6103976004803603602081101561075f57600080fd5b50356001600160a01b03166113c0565b61025d6004803603602081101561078557600080fd5b50356113d3565b61079461104c565b61079d57600080fd5b600280546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905550565b61084f610b64565b61088e576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61089733611377565b6108dc576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156108ec57600080fd5b6001600160a01b03166000908152600c60205260409020429055565b610911336113f9565b565b61091b610b64565b61095a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61096333611377565b6109a8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156109b857600080fd5b6109c181611441565b50565b6109cc610b64565b610a0b576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610a1433611377565b610a59576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610a6957600080fd5b610a7a60068263ffffffff6114d316565b6040516001600160a01b038216907f44d5fe68b00f68950fb9c1ff0a61ef7f747b1a36359a7e3a7f3324db4b87896790600090a250565b610ab9610b64565b610af8576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610b0133611377565b610b46576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610b5657600080fd5b610b60828261151f565b5050565b6000610b6f3061115f565b90505b90565b610b7d610b64565b610bbc576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610bc533611377565b610c0a576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610c1a57600080fd5b6109c1816115ed565b6000610c2d61104c565b610c3657600080fd5b610c3f8261176c565b5060015b919050565b600d6020526000908152604090205481565b600c6020526000908152604090205481565b600b5481565b6001600160a01b0381166000908152600c602052604081205481906201518090610ca390429063ffffffff6117b416565b81610caa57fe5b049050600b548111158015610ccb5750610ccb60078463ffffffff6117c916565b9392505050565b610cdb33610d32565b610ce457600080fd5b60055460ff16610cf357600080fd5b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610d4560048363ffffffff6117c916565b92915050565b600e6020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b505050505081565b60055460ff1690565b610df7610b64565b610e36576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b610e3f33611377565b610e84576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff1615610e9457600080fd5b610e9d816117fe565b610eee576040805162461bcd60e51b815260206004820152601f60248201527f476976656e2061646472657373206973206e6f74206120636f6e747261637400604482015290519081900360640190fd5b610eff60088263ffffffff6114d316565b610f0881611441565b6040516001600160a01b038216907f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e20590600090a250565b600f602052600090815260409020546001600160a01b031681565b61091133611804565b610f6b61104c565b610f7457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fc733610d32565b610fd057600080fd5b6109c18161184c565b610fe233610d32565b610feb57600080fd5b60055460ff1615610ffb57600080fd5b6005805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60095481565b600a5481565b611071610b64565b6110b0576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b6110b933611377565b6110fe576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff161561110e57600080fd5b61111f60088263ffffffff61189416565b611128816115ed565b6040516001600160a01b038216907f8d30d41865a0b811b9545d879520d2dde9f4cc49e4241f486ad9752bc904b56590600090a250565b6002546000906001600160a01b03166111b3576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60035460025460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b15801561120b57600080fd5b505afa15801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b5051610c3f57506000610c43565b61124b610b64565b61128a576040805162461bcd60e51b81526020600482015260186024820152600080516020611a23833981519152604482015290519081900360640190fd5b61129333611377565b6112d8576040805162461bcd60e51b81526020600482015260116024820152703737ba1024b232b73a34ba3ca0b236b4b760791b604482015290519081900360640190fd5b60055460ff16156112e857600080fd5b6112f960068263ffffffff61189416565b6040516001600160a01b038216907f1747ca720b1a174a464b6513ace29b1d3190b5f632b9f34147017c81425bfde890600090a250565b6000610d4560088363ffffffff6117c916565b60055460ff161561135357600080fd5b610911336115ed565b6001600160a01b03166000908152600c602052604090205490565b6000610d4560018363ffffffff6117c916565b61139261104c565b61139b57600080fd5b6109c1816118dc565b60006113ae61104c565b6113b757600080fd5b610c3f826113f9565b6000610d4560068363ffffffff6117c916565b6113db61104c565b6113e457600080fd5b60055460ff16156113f457600080fd5b600b55565b61140a60018263ffffffff61189416565b6040516001600160a01b038216907f869f6a5b4767d57c58d57f1ddf82e1516487f35944a19bf30a4a21bd35f6ad0590600090a250565b61145260078263ffffffff6114d316565b6009805460010190556001600160a01b0381166000908152600d602090815260408083204290819055600c9092529091205561148d816117fe565b1561149c57600a805460010190555b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6001600160a01b0381166114e657600080fd5b6114f082826117c9565b156114fa57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b80516020808301919091206000818152600f9092526040909120546001600160a01b03161561158e576040805162461bcd60e51b815260206004820152601660248201527511125108185b1c9958591e481c9959da5cdd195c995960521b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e6020908152604090912083516115b79285019061194a565b506000818152600f6020526040902080546001600160a01b0319166001600160a01b0385161790556115e883611441565b505050565b6115fe60078263ffffffff61189416565b600980546000190190556001600160a01b0381166000908152600c602052604081205561162a816117fe565b1561163a57600a80546000190190555b6001600160a01b0381166000908152600e602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116d95780601f106116ae576101008083540402835291602001916116d9565b820191906000526020600020905b8154815290600101906020018083116116bc57829003601f168201915b505083516020808601919091206001600160a01b0388166000908152600c83526040808220829055600e9093529182209596509461171b9450925090506119c8565b6000818152600f602052604080822080546001600160a01b0319169055516001600160a01b038516917f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b691a2505050565b61177d60018263ffffffff6114d316565b6040516001600160a01b038216907f3505858ac30c166c603cb64de4a970615e36a4ed8fea37ba93bc5f11a38dd30990600090a250565b6000828211156117c357600080fd5b50900390565b60006001600160a01b0382166117de57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3b151590565b61181560048263ffffffff61189416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61185d60048263ffffffff6114d316565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6001600160a01b0381166118a757600080fd5b6118b182826117c9565b6118ba57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166118ef57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061198b57805160ff19168380011785556119b8565b828001600101855582156119b8579182015b828111156119b857825182559160200191906001019061199d565b506119c4929150611a08565b5090565b50805460018160011615610100020316600290046000825580601f106119ee57506109c1565b601f0160209004906000526020600020908101906109c191905b610b7291905b808211156119c45760008155600101611a0e56fe536368656d65206973206e6f7420726567697374657265640000000000000000a265627a7a723158203848b9dbc03a486444d7613ed99027bcd93d6f206eb021a0c49c8702a52c973264736f6c63430005100032",
  "sourceMap": "456:7904:29:-;;;443:64:22;;;-1:-1:-1;;;;;;443:64:22;;;505:1;683:35:29;;;;721:39;;801:2;763:40;;1310:114;5:2:-1;;;;30:1;27;20:12;5:2;1310:114:29;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1310:114:29;1363:1;515:19:72;;-1:-1:-1;;;;;;515:19:72;524:10;515:19;;;;549:40;;-1:-1:-1;;;;;582:6:72;;;;;1363:1:29;;-1:-1:-1;;;;;;;;;;;549:40:72;1363:1:29;;549:40:72;548:29:27;566:10;-1:-1:-1;;;;;548:17:27;:29;:::i;:::-;688:6:22;:16;;-1:-1:-1;;;;;;688:16:22;-1:-1:-1;;;;;688:16:22;;;;;;;;;;;719:6;:19;715:98;;787:6;;;;;;;;;-1:-1:-1;;;;;787:6:22;-1:-1:-1;;;;;787:12:22;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:14:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;787:14:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;787:14:22;754:10;:48;;-1:-1:-1;;;;;;754:48:22;-1:-1:-1;;;;;754:48:22;;;;;;;;;715:98;-1:-1:-1;275:22:67;286:10;-1:-1:-1;;;;;275:10:67;:22;:::i;:::-;352:7:69;:15;;-1:-1:-1;;352:15:69;;;-1:-1:-1;;;;;1375:19:29;;;1371:49;;1396:24;1414:5;-1:-1:-1;;;;;1396:17:29;:24;:::i;:::-;1310:114;456:7904;;1970:142:27;2034:27;2053:7;2034:14;:18;;;;;;:27;;;;:::i;:::-;2077;;-1:-1:-1;;;;;2077:27:27;;;;;;;;1970:142;:::o;685:119:67:-;741:21;754:7;741:8;:12;;;;;;:21;;;;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:67;;;;;;;;685:119;:::o;1655:107:72:-;863:9;-1:-1:-1;;;;;863:7:72;:9;:::i;:::-;855:18;;;;;;1727:28;1746:8;-1:-1:-1;;;;;1727:18:72;:28;:::i;:::-;1655:107;:::o;259:181:65:-;-1:-1:-1;;;;;335:21:65;;327:30;;;;;;376:18;380:4;386:7;-1:-1:-1;;;;;376:3:65;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:65;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:65;429:4;406:27;;;259:181::o;979:90:72:-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:72;1042:10;:20;;979:90::o;1906:183::-;-1:-1:-1;;;;;1979:22:72;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:72;;;;2038:6;;;-1:-1:-1;;;;;;;;;;;2017:38:72;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:72;-1:-1:-1;;;;;2065:17:72;;;;;;;;;;1906:183::o;786:162:65:-;858:4;-1:-1:-1;;;;;882:21:65;;874:30;;;;;;-1:-1:-1;;;;;;921:20:65;:11;:20;;;;;;;;;;;;;;;786:162::o;456:7904:29:-;;;;;;;",
  "deployedSourceMap": "456:7904:29:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;456:7904:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:143:22;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1698:143:22;-1:-1:-1;;;;;1698:143:22;;:::i;:::-;;1898:142:29;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1898:142:29;-1:-1:-1;;;;;1898:142:29;;:::i;1796:91:27:-;;;:::i;2189:136:29:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2189:136:29;-1:-1:-1;;;;;2189:136:29;;:::i;5004:166::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5004:166:29;-1:-1:-1;;;;;5004:166:29;;:::i;2474:174::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;2474:174:29;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;2474:174:29;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2474:174:29;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2474:174:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2474:174:29;;-1:-1:-1;2474:174:29;;-1:-1:-1;;;;;2474:174:29:i;1987:102:22:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;2803:142:29;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2803:142:29;-1:-1:-1;;;;;2803:142:29;;:::i;1248::27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1248:142:27;-1:-1:-1;;;;;1248:142:27;;:::i;862:44:29:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;862:44:29;-1:-1:-1;;;;;862:44:29;;:::i;:::-;;;;;;;;;;;;;;;;807:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;807:52:29;-1:-1:-1;;;;;807:52:29;;:::i;763:40::-;;;:::i;3283:254::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3283:254:29;-1:-1:-1;;;;;3283:254:29;;:::i;1176:115:69:-;;;:::i;395:107:67:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;395:107:67;-1:-1:-1;;;;;395:107:67;;:::i;910:43:29:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;910:43:29;-1:-1:-1;;;;;910:43:29;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;910:43:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;460:76:69;;;:::i;5601:258:29:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5601:258:29;-1:-1:-1;;;;;5601:258:29;;:::i;956:51::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;956:51:29;;:::i;:::-;;;;-1:-1:-1;;;;;956:51:29;;;;;;;;;;;;;;604:75:67;;;:::i;1347:137:72:-;;;:::i;508:90:67:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;508:90:67;-1:-1:-1;;;;;508:90:67;;:::i;973:113:69:-;;;:::i;659:77:72:-;;;:::i;979:90::-;;;:::i;683:35:29:-;;;:::i;721:39::-;;;:::i;5967:202::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5967:202:29;-1:-1:-1;;;;;5967:202:29;;:::i;2235:262:22:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2235:262:22;-1:-1:-1;;;;;2235:262:22;;:::i;5324:174:29:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5324:174:29;-1:-1:-1;;;;;5324:174:29;;:::i;6340:104::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6340:104:29;-1:-1:-1;;;;;6340:104:29;;:::i;3004:90::-;;;:::i;3691:115::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3691:115:29;-1:-1:-1;;;;;3691:115:29;;:::i;951:122:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;951:122:27;-1:-1:-1;;;;;951:122:27;;:::i;1655:107:72:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:72;-1:-1:-1;;;;;1655:107:72;;:::i;1570:148:27:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1570:148:27;-1:-1:-1;;;;;1570:148:27;;:::i;7992:104:29:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7992:104:29;-1:-1:-1;;;;;7992:104:29;;:::i;1588:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1588:124:29;;:::i;1698:143:22:-;863:9:72;:7;:9::i;:::-;855:18;;;;;;1760:6:22;:16;;-1:-1:-1;;;;;;1760:16:22;-1:-1:-1;;;;;1760:16:22;;;;;;;;;;;1819:14;;;-1:-1:-1;;;1819:14:22;;;;:6;;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;1819:14:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1819:14:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1819:14:22;1786:10;:48;;-1:-1:-1;;;;;;1786:48:22;-1:-1:-1;;;;;1786:48:22;;;;;;;;;-1:-1:-1;1698:143:22:o;1898:142:29:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;-1:-1:-1;;;;;2004:26:29;;;;;:17;:26;;;;;2033:3;2004:32;;1898:142::o;1796:91:27:-;1847:32;1868:10;1847:20;:32::i;:::-;1796:91::o;2189:136:29:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;2297:24:29;2313:7;2297:15;:24::i;:::-;2189:136;:::o;5004:166::-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;5112:22:29;:9;5126:7;5112:22;:13;:22;:::i;:::-;5143:23;;-1:-1:-1;;;;;5143:23:29;;;;;;;;5004:166;:::o;2474:174::-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;2608:36:29;2631:7;2640:3;2608:22;:36::i;:::-;2474:174;;:::o;1987:102:22:-;2032:4;2055:27;2076:4;2055:12;:27::i;:::-;2048:34;;1987:102;;:::o;2803:142:29:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;2914:27:29;2933:7;2914:18;:27::i;1248:142:27:-;1317:4;863:9:72;:7;:9::i;:::-;855:18;;;;;;1334:26:27;1352:7;1334:17;:26::i;:::-;-1:-1:-1;1378:4:27;883:1:72;1248:142:27;;;:::o;862:44:29:-;;;;;;;;;;;;;:::o;807:52::-;;;;;;;;;;;;;:::o;763:40::-;;;;:::o;3283:254::-;-1:-1:-1;;;;;3401:26:29;;3344:4;3401:26;;;:17;:26;;;;;;3344:4;;3435:6;;3393:35;;:3;;:35;:7;:35;:::i;:::-;3388:53;;;;;;3354:87;;3483:20;;3456:23;:47;;3455:78;;;;-1:-1:-1;3511:22:29;:9;3525:7;3511:22;:13;:22;:::i;:::-;3445:88;3283:254;-1:-1:-1;;;3283:254:29:o;1176:115:69:-;350:20:67;359:10;350:8;:20::i;:::-;342:29;;;;;;860:7:69;;;;852:16;;;;;;1234:7;:15;;-1:-1:-1;;1234:15:69;;;1264:20;;;1273:10;1264:20;;;;;;;;;;;;;1176:115::o;395:107:67:-;451:4;474:21;:8;487:7;474:21;:12;:21;:::i;:::-;467:28;395:107;-1:-1:-1;;395:107:67:o;910:43:29:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;910:43:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;460:76:69:-;522:7;;;;460:76;:::o;5601:258:29:-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;5714:19:29;5725:7;5714:10;:19::i;:::-;5706:63;;;;;-1:-1:-1;;;5706:63:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;5773:22;:9;5787:7;5773:22;:13;:22;:::i;:::-;5799:24;5815:7;5799:15;:24::i;:::-;5833:22;;-1:-1:-1;;;;;5833:22:29;;;;;;;;5601:258;:::o;956:51::-;;;;;;;;;;;;-1:-1:-1;;;;;956:51:29;;:::o;604:75:67:-;647:25;661:10;647:13;:25::i;1347:137:72:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:72;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:72;;;1347:137::o;508:90:67:-;350:20;359:10;350:8;:20::i;:::-;342:29;;;;;;572:19;583:7;572:10;:19::i;973:113:69:-;350:20:67;359:10;350:8;:20::i;:::-;342:29;;;;;;689:7:69;;;;688:8;680:17;;;;;;1032:7;:14;;-1:-1:-1;;1032:14:69;1042:4;1032:14;;;1061:18;;;1068:10;1061:18;;;;;;;;;;;;;973:113::o;659:77:72:-;697:7;723:6;-1:-1:-1;;;;;723:6:72;659:77;:::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:72;1042:10;:20;;979:90::o;683:35:29:-;;;;:::o;721:39::-;;;;:::o;5967:202::-;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;6075:25:29;:9;6092:7;6075:25;:16;:25;:::i;:::-;6104:27;6123:7;6104:18;:27::i;:::-;6141:24;;-1:-1:-1;;;;;6141:24:29;;;;;;;;5967:202;:::o;2235:262:22:-;2318:6;;2294:4;;-1:-1:-1;;;;;2318:6:22;2310:49;;;;;-1:-1:-1;;;2310:49:22;;;;;;;;;;;;-1:-1:-1;;;2310:49:22;;;;;;;;;;;;;;;2376:10;;2422:6;;2376:54;;;-1:-1:-1;;;2376:54:22;;-1:-1:-1;;;;;2376:54:22;;;;;;;2422:6;;;2376:54;;;;;;:10;;;;;:29;;:54;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2376:54:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2376:54:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2376:54:22;2370:100;;-1:-1:-1;2454:5:22;2447:12;;5324:174:29;1121:14:22;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:22;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1113:51:22;;;;;;;;;;;;;;;703:27:27;719:10;703:15;:27::i;:::-;695:57;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;-1:-1:-1;;;695:57:27;;;;;;;;;;;;;;;689:7:69;;;;688:8;680:17;;;;;;5435:25:29;:9;5452:7;5435:25;:16;:25;:::i;:::-;5469;;-1:-1:-1;;;;;5469:25:29;;;;;;;;5324:174;:::o;6340:104::-;6401:4;6418:22;:9;6432:7;6418:22;:13;:22;:::i;3004:90::-;689:7:69;;;;688:8;680:17;;;;;;3060:30:29;3079:10;3060:18;:30::i;3691:115::-;-1:-1:-1;;;;;3776:26:29;3756:7;3776:26;;;:17;:26;;;;;;;3691:115::o;951:122:27:-;1014:4;1038:27;:14;1057:7;1038:27;:18;:27;:::i;1655:107:72:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;1570:148:27:-;1642:4;863:9:72;:7;:9::i;:::-;855:18;;;;;;1659:29:27;1680:7;1659:20;:29::i;7992:104:29:-;8053:4;8070:22;:9;8084:7;8070:22;:13;:22;:::i;1588:124::-;863:9:72;:7;:9::i;:::-;855:18;;;;;;689:7:69;;;;688:8;680:17;;;;;;1679:20:29;:29;1588:124::o;2198:150:27:-;2265:30;:14;2287:7;2265:30;:21;:30;:::i;:::-;2311:29;;-1:-1:-1;;;;;2311:29:27;;;;;;;;2198:150;:::o;6539:270:29:-;6594:22;:9;6608:7;6594:22;:13;:22;:::i;:::-;6621:16;:21;;6641:1;6621:21;;;-1:-1:-1;;;;;6646:18:29;;6621:16;6646:18;;;:9;:18;;;;;;;;6667:3;6646:24;;;;6674:17;:26;;;;;;:32;6715:19;6656:7;6715:10;:19::i;:::-;6711:60;;;6741:20;:25;;6765:1;6741:25;;;6711:60;6780:25;;-1:-1:-1;;;;;6780:25:29;;;;;;;;6539:270;:::o;259:181:65:-;-1:-1:-1;;;;;335:21:65;;327:30;;;;;;376:18;380:4;386:7;376:3;:18::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:65;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:65;429:4;406:27;;;259:181::o;6953:306:29:-;7053:21;;;;;;;;;;7037:13;7090:23;;;:16;:23;;;;;;;;-1:-1:-1;;;;;7090:23:29;:37;7078:82;;;;;-1:-1:-1;;;7078:82:29;;;;;;;;;;;;-1:-1:-1;;;7078:82:29;;;;;;;;;;;;;;;-1:-1:-1;;;;;7165:18:29;;;;;;:9;:18;;;;;;;;:24;;;;;;;;:::i;:::-;-1:-1:-1;7193:23:29;;;;:16;:23;;;;;:33;;-1:-1:-1;;;;;;7193:33:29;-1:-1:-1;;;;;7193:33:29;;;;;7231:24;7193:33;7231:15;:24::i;:::-;6953:306;;;:::o;7359:436::-;7417:25;:9;7434:7;7417:25;:16;:25;:::i;:::-;7447:16;:21;;-1:-1:-1;;7447:21:29;;;-1:-1:-1;;;;;7479:26:29;;7447:16;7479:26;;;:17;:26;;;;;7472:33;7514:19;7497:7;7514:10;:19::i;:::-;7510:60;;;7540:20;:25;;-1:-1:-1;;7540:25:29;;;7510:60;-1:-1:-1;;;;;7594:18:29;;;;;;:9;:18;;;;;;;;;7574:38;;;;;;-1:-1:-1;;7574:38:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;;:38;;;7594:18;7574:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7632:21:29;;;;;;;;;;-1:-1:-1;;;;;7665:26:29;;7616:13;7665:26;;;:17;:26;;;;;;7658:33;;;7702:9;:18;;;;;;7574:38;;-1:-1:-1;7632:21:29;7695:25;;-1:-1:-1;7702:18:29;-1:-1:-1;7616:13:29;-1:-1:-1;7695:25:29;:::i;:::-;7731:23;;;;:16;:23;;;;;;7724:30;;-1:-1:-1;;;;;;7724:30:29;;;7764:27;-1:-1:-1;;;;;7764:27:29;;;;;;7359:436;;;:::o;1970:142:27:-;2034:27;:14;2053:7;2034:27;:18;:27;:::i;:::-;2077;;-1:-1:-1;;;;;2077:27:27;;;;;;;;1970:142;:::o;1205:145:71:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:71;;;1205:145::o;786:162:65:-;858:4;-1:-1:-1;;;;;882:21:65;;874:30;;;;;;-1:-1:-1;;;;;;921:20:65;:11;:20;;;;;;;;;;;;;;;786:162::o;8202:156:29:-;8312:18;8344:10;;;8202:156::o;810:127:67:-;869:24;:8;885:7;869:24;:15;:24;:::i;:::-;908:22;;-1:-1:-1;;;;;908:22:67;;;;;;;;810:127;:::o;685:119::-;741:21;:8;754:7;741:21;:12;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:67;;;;;;;;685:119;:::o;514:184:65:-;-1:-1:-1;;;;;593:21:65;;585:30;;;;;;633:18;637:4;643:7;633:3;:18::i;:::-;625:27;;;;;;-1:-1:-1;;;;;663:20:65;686:5;663:20;;;;;;;;;;;:28;;-1:-1:-1;;663:28:65;;;514:184::o;1906:183:72:-;-1:-1:-1;;;;;1979:22:72;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:72;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:72;-1:-1:-1;;;;;2065:17:72;;;;;;;;;;1906:183::o;456:7904:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;456:7904:29;;;-1:-1:-1;456:7904:29;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/access/Roles.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\";\n\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\n\nimport \"../dao/schemes/SchemeGuard.sol\";\nimport \"./IdentityAdminRole.sol\";\n\n/* @title Identity contract responsible for whitelisting\n * and keeping track of amount of whitelisted users\n */\ncontract IdentityWithOwner is IdentityAdminRole, SchemeGuard, Pausable {\n\tusing Roles for Roles.Role;\n\tusing SafeMath for uint256;\n\n\tRoles.Role private blacklist;\n\tRoles.Role private whitelist;\n\tRoles.Role private contracts;\n\n\tuint256 public whitelistedCount = 0;\n\tuint256 public whitelistedContracts = 0;\n\tuint256 public authenticationPeriod = 14;\n\n\tmapping(address => uint256) public dateAuthenticated;\n\tmapping(address => uint256) public dateAdded;\n\n\tmapping(address => string) public addrToDID;\n\tmapping(bytes32 => address) public didHashToAddress;\n\n\tevent BlacklistAdded(address indexed account);\n\tevent BlacklistRemoved(address indexed account);\n\n\tevent WhitelistedAdded(address indexed account);\n\tevent WhitelistedRemoved(address indexed account);\n\n\tevent ContractAdded(address indexed account);\n\tevent ContractRemoved(address indexed account);\n\n\tconstructor(address owner) public SchemeGuard(Avatar(0)) {\n\t\tif (owner != address(0)) transferOwnership(owner);\n\t}\n\n\t/* @dev Sets a new value for authenticationPeriod.\n\t * Can only be called by Identity Administrators.\n\t * @param period new value for authenticationPeriod\n\t */\n\tfunction setAuthenticationPeriod(uint256 period)\n\t\tpublic\n\t\tonlyOwner\n\t\twhenNotPaused\n\t{\n\t\tauthenticationPeriod = period;\n\t}\n\n\t/* @dev Sets the authentication date of `account`\n\t * to the current time.\n\t * Can only be called by Identity Administrators.\n\t * @param account address to change its auth date\n\t */\n\tfunction authenticate(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\tdateAuthenticated[account] = now;\n\t}\n\n\t/* @dev Adds an address as whitelisted.\n\t * Can only be called by Identity Administrators.\n\t * @param account address to add as whitelisted\n\t */\n\tfunction addWhitelisted(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\t_addWhitelisted(account);\n\t}\n\n\t/* @dev Adds an address as whitelisted under a specific ID\n\t * @param account The address to add\n\t * @param did the ID to add account under\n\t */\n\tfunction addWhitelistedWithDID(address account, string memory did)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\t_addWhitelistedWithDID(account, did);\n\t}\n\n\t/* @dev Removes an address as whitelisted.\n\t * Can only be called by Identity Administrators.\n\t * @param account address to remove as whitelisted\n\t */\n\tfunction removeWhitelisted(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\t_removeWhitelisted(account);\n\t}\n\n\t/* @dev Renounces message sender from whitelisted\n\t */\n\tfunction renounceWhitelisted() public whenNotPaused {\n\t\t_removeWhitelisted(msg.sender);\n\t}\n\n\t/* @dev Returns true if given address has been added to whitelist\n\t * @param account the address to check\n\t * @return a bool indicating weather the address is present in whitelist\n\t */\n\tfunction isWhitelisted(address account) public view returns (bool) {\n\t\tuint256 daysSinceAuthentication = (\n\t\t\tnow.sub(dateAuthenticated[account])\n\t\t) / 1 days;\n\t\treturn\n\t\t\t(daysSinceAuthentication <= authenticationPeriod) &&\n\t\t\twhitelist.has(account);\n\t}\n\n\t/* @dev Function that gives the date the given user was added\n\t * @param account The address to check\n\t * @return The date the address was added\n\t */\n\tfunction lastAuthenticated(address account) public view returns (uint256) {\n\t\treturn dateAuthenticated[account];\n\t}\n\n\t// /**\n\t//  *\n\t//  * @dev Function to transfer whitelisted privilege to another address\n\t//  * relocates did of sender to give address\n\t//  * @param account The address to transfer to\n\t//  */\n\t// function transferAccount(address account) public whenNotPaused {\n\t//     ERC20 token = avatar.nativeToken();\n\t//     require(!isBlacklisted(account), \"Cannot transfer to blacklisted\");\n\t//     require(token.balanceOf(account) == 0, \"Account is already in use\");\n\t//     require(isWhitelisted(msg.sender), \"Requester need to be whitelisted\");\n\n\t//     require(\n\t//         keccak256(bytes(addrToDID[account])) == keccak256(bytes(\"\")),\n\t//         \"address already has DID\"\n\t//     );\n\n\t//     string memory did = addrToDID[msg.sender];\n\t//     bytes32 pHash = keccak256(bytes(did));\n\n\t//     uint256 balance = token.balanceOf(msg.sender);\n\t//     token.transferFrom(msg.sender, account, balance);\n\t//     _removeWhitelisted(msg.sender);\n\t//     _addWhitelisted(account);\n\t//     addrToDID[account] = did;\n\t//     didHashToAddress[pHash] = account;\n\t// }\n\n\t/* @dev Adds an address to blacklist.\n\t * Can only be called by Identity Administrators.\n\t * @param account address to add as blacklisted\n\t */\n\tfunction addBlacklisted(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\tblacklist.add(account);\n\t\temit BlacklistAdded(account);\n\t}\n\n\t/* @dev Removes an address from blacklist\n\t * Can only be called by Identity Administrators.\n\t * @param account address to remove as blacklisted\n\t */\n\tfunction removeBlacklisted(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\tblacklist.remove(account);\n\t\temit BlacklistRemoved(account);\n\t}\n\n\t/* @dev Function to add a Contract to list of contracts\n\t * @param account The address to add\n\t */\n\tfunction addContract(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\trequire(isContract(account), \"Given address is not a contract\");\n\t\tcontracts.add(account);\n\t\t_addWhitelisted(account);\n\n\t\temit ContractAdded(account);\n\t}\n\n\t/* @dev Function to remove a Contract from list of contracts\n\t * @param account The address to add\n\t */\n\tfunction removeContract(address account)\n\t\tpublic\n\t\tonlyRegistered\n\t\tonlyIdentityAdmin\n\t\twhenNotPaused\n\t{\n\t\tcontracts.remove(account);\n\t\t_removeWhitelisted(account);\n\n\t\temit ContractRemoved(account);\n\t}\n\n\t/* @dev Function to check if given contract is on list of contracts.\n\t * @param address to check\n\t * @return a bool indicating if address is on list of contracts\n\t */\n\tfunction isDAOContract(address account) public view returns (bool) {\n\t\treturn contracts.has(account);\n\t}\n\n\t/* @dev Internal function to add to whitelisted\n\t * @param account the address to add\n\t */\n\tfunction _addWhitelisted(address account) internal {\n\t\twhitelist.add(account);\n\n\t\twhitelistedCount += 1;\n\t\tdateAdded[account] = now;\n\t\tdateAuthenticated[account] = now;\n\n\t\tif (isContract(account)) {\n\t\t\twhitelistedContracts += 1;\n\t\t}\n\n\t\temit WhitelistedAdded(account);\n\t}\n\n\t/* @dev Internal whitelisting with did function.\n\t * @param account the address to add\n\t * @param did the id to register account under\n\t */\n\tfunction _addWhitelistedWithDID(address account, string memory did)\n\t\tinternal\n\t{\n\t\tbytes32 pHash = keccak256(bytes(did));\n\t\trequire(\n\t\t\tdidHashToAddress[pHash] == address(0),\n\t\t\t\"DID already registered\"\n\t\t);\n\n\t\taddrToDID[account] = did;\n\t\tdidHashToAddress[pHash] = account;\n\n\t\t_addWhitelisted(account);\n\t}\n\n\t/* @dev Internal function to remove from whitelisted\n\t * @param account the address to add\n\t */\n\tfunction _removeWhitelisted(address account) internal {\n\t\twhitelist.remove(account);\n\n\t\twhitelistedCount -= 1;\n\t\tdelete dateAuthenticated[account];\n\n\t\tif (isContract(account)) {\n\t\t\twhitelistedContracts -= 1;\n\t\t}\n\n\t\tstring memory did = addrToDID[account];\n\t\tbytes32 pHash = keccak256(bytes(did));\n\n\t\tdelete dateAuthenticated[account];\n\t\tdelete addrToDID[account];\n\t\tdelete didHashToAddress[pHash];\n\n\t\temit WhitelistedRemoved(account);\n\t}\n\n\t/* @dev Returns true if given address has been added to the blacklist\n\t * @param account the address to check\n\t * @return a bool indicating weather the address is present in the blacklist\n\t */\n\tfunction isBlacklisted(address account) public view returns (bool) {\n\t\treturn blacklist.has(account);\n\t}\n\n\t/* @dev Function to see if given address is a contract\n\t * @return true if address is a contract\n\t */\n\tfunction isContract(address _addr) internal view returns (bool) {\n\t\tuint256 length;\n\t\tassembly {\n\t\t\tlength := extcodesize(_addr)\n\t\t}\n\t\treturn length > 0;\n\t}\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityWithOwner.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityWithOwner.sol",
    "exportedSymbols": {
      "IdentityWithOwner": [
        6259
      ]
    },
    "id": 6260,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5736,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:29"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 5737,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 16578,
        "src": "25:58:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 5738,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 17145,
        "src": "84:59:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 5739,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 16948,
        "src": "144:64:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 5740,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 8542,
        "src": "210:55:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../dao/schemes/SchemeGuard.sol",
        "id": 5741,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 4183,
        "src": "267:40:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol",
        "file": "./IdentityAdminRole.sol",
        "id": 5742,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 5575,
        "src": "308:33:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5743,
              "name": "IdentityAdminRole",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5574,
              "src": "486:17:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityAdminRole_$5574",
                "typeString": "contract IdentityAdminRole"
              }
            },
            "id": 5744,
            "nodeType": "InheritanceSpecifier",
            "src": "486:17:29"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5745,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4182,
              "src": "505:11:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$4182",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 5746,
            "nodeType": "InheritanceSpecifier",
            "src": "505:11:29"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5747,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16947,
              "src": "518:8:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$16947",
                "typeString": "contract Pausable"
              }
            },
            "id": 5748,
            "nodeType": "InheritanceSpecifier",
            "src": "518:8:29"
          }
        ],
        "contractDependencies": [
          4182,
          5574,
          16783,
          16947,
          17253
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 6259,
        "linearizedBaseContracts": [
          6259,
          16947,
          16783,
          4182,
          5574,
          17253
        ],
        "name": "IdentityWithOwner",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5751,
            "libraryName": {
              "contractScope": null,
              "id": 5749,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16577,
              "src": "536:5:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$16577",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "530:27:29",
            "typeName": {
              "contractScope": null,
              "id": 5750,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "546:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 5754,
            "libraryName": {
              "contractScope": null,
              "id": 5752,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17144,
              "src": "565:8:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$17144",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "559:27:29",
            "typeName": {
              "id": 5753,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "578:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 5756,
            "name": "blacklist",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "589:28:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5755,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "589:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5758,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "620:28:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5757,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "620:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5760,
            "name": "contracts",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "651:28:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5759,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "651:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5763,
            "name": "whitelistedCount",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "683:35:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5761,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "683:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 5762,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "717:1:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5766,
            "name": "whitelistedContracts",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "721:39:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5764,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "721:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 5765,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "759:1:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5769,
            "name": "authenticationPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "763:40:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5767,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "763:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3134",
              "id": 5768,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "801:2:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_14_by_1",
                "typeString": "int_const 14"
              },
              "value": "14"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5773,
            "name": "dateAuthenticated",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "807:52:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 5772,
              "keyType": {
                "id": 5770,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "815:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "807:27:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 5771,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "826:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5777,
            "name": "dateAdded",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "862:44:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 5776,
              "keyType": {
                "id": 5774,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "870:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "862:27:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 5775,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "881:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5781,
            "name": "addrToDID",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "910:43:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 5780,
              "keyType": {
                "id": 5778,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "918:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "910:26:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueType": {
                "id": 5779,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "929:6:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5785,
            "name": "didHashToAddress",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "956:51:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 5784,
              "keyType": {
                "id": 5782,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "964:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "956:27:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 5783,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "975:7:29",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5789,
            "name": "BlacklistAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5787,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5789,
                  "src": "1032:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1032:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1031:25:29"
            },
            "src": "1011:46:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5793,
            "name": "BlacklistRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5791,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5793,
                  "src": "1082:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1082:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1081:25:29"
            },
            "src": "1059:48:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5797,
            "name": "WhitelistedAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5795,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "1133:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5794,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1133:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1132:25:29"
            },
            "src": "1110:48:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5801,
            "name": "WhitelistedRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5799,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5801,
                  "src": "1185:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5798,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1184:25:29"
            },
            "src": "1160:50:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5805,
            "name": "ContractAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5803,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5805,
                  "src": "1233:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1232:25:29"
            },
            "src": "1213:45:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5809,
            "name": "ContractRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5807,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "1282:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1282:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1281:25:29"
            },
            "src": "1260:47:29"
          },
          {
            "body": {
              "id": 5829,
              "nodeType": "Block",
              "src": "1367:57:29",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5819,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5811,
                      "src": "1375:5:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1392:1:29",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 5820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1384:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 5822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1384:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1375:19:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5828,
                  "nodeType": "IfStatement",
                  "src": "1371:49:29",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5825,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5811,
                          "src": "1414:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5824,
                        "name": "transferOwnership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17229,
                        "src": "1396:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address)"
                        }
                      },
                      "id": 5826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1396:24:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 5827,
                    "nodeType": "ExpressionStatement",
                    "src": "1396:24:29"
                  }
                }
              ]
            },
            "documentation": null,
            "id": 5830,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1363:1:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5814,
                      "name": "Avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8541,
                      "src": "1356:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Avatar_$8541_$",
                        "typeString": "type(contract Avatar)"
                      }
                    },
                    "id": 5816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1356:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$8541",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 5817,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5813,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4182,
                  "src": "1344:11:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$4182_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1344:22:29"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5811,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5830,
                  "src": "1322:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5810,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1322:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1321:15:29"
            },
            "returnParameters": {
              "id": 5818,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1367:0:29"
            },
            "scope": 6259,
            "src": "1310:114:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5843,
              "nodeType": "Block",
              "src": "1675:37:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5839,
                      "name": "authenticationPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5769,
                      "src": "1679:20:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5840,
                      "name": "period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5832,
                      "src": "1702:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1679:29:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5842,
                  "nodeType": "ExpressionStatement",
                  "src": "1679:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 5844,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5835,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5834,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 17187,
                  "src": "1648:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1648:9:29"
              },
              {
                "arguments": null,
                "id": 5837,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5836,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "1660:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1660:13:29"
              }
            ],
            "name": "setAuthenticationPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5833,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5832,
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "scope": 5844,
                  "src": "1621:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5831,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1621:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1620:16:29"
            },
            "returnParameters": {
              "id": 5838,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1675:0:29"
            },
            "scope": 6259,
            "src": "1588:124:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5861,
              "nodeType": "Block",
              "src": "2000:40:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5855,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "2004:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5857,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5856,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5846,
                        "src": "2022:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2004:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5858,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "2033:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2004:32:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5860,
                  "nodeType": "ExpressionStatement",
                  "src": "2004:32:29"
                }
              ]
            },
            "documentation": null,
            "id": 5862,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5849,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5848,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "1948:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1948:14:29"
              },
              {
                "arguments": null,
                "id": 5851,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5850,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "1965:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1965:17:29"
              },
              {
                "arguments": null,
                "id": 5853,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5852,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "1985:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1985:13:29"
              }
            ],
            "name": "authenticate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5846,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5862,
                  "src": "1920:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5845,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1920:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1919:17:29"
            },
            "returnParameters": {
              "id": 5854,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2000:0:29"
            },
            "scope": 6259,
            "src": "1898:142:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5877,
              "nodeType": "Block",
              "src": "2293:32:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5874,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5864,
                        "src": "2313:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5873,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6123,
                      "src": "2297:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2297:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5876,
                  "nodeType": "ExpressionStatement",
                  "src": "2297:24:29"
                }
              ]
            },
            "documentation": null,
            "id": 5878,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5867,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5866,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2241:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2241:14:29"
              },
              {
                "arguments": null,
                "id": 5869,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5868,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2258:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2258:17:29"
              },
              {
                "arguments": null,
                "id": 5871,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5870,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2278:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2278:13:29"
              }
            ],
            "name": "addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5865,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5864,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5878,
                  "src": "2213:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5863,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2213:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2212:17:29"
            },
            "returnParameters": {
              "id": 5872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2293:0:29"
            },
            "scope": 6259,
            "src": "2189:136:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5896,
              "nodeType": "Block",
              "src": "2604:44:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5892,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5880,
                        "src": "2631:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5893,
                        "name": "did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5882,
                        "src": "2640:3:29",
                        "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": 5891,
                      "name": "_addWhitelistedWithDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6166,
                      "src": "2608:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 5894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2608:36:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5895,
                  "nodeType": "ExpressionStatement",
                  "src": "2608:36:29"
                }
              ]
            },
            "documentation": null,
            "id": 5897,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5885,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5884,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2552:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2552:14:29"
              },
              {
                "arguments": null,
                "id": 5887,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5886,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2569:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2569:17:29"
              },
              {
                "arguments": null,
                "id": 5889,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5888,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2589:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2589:13:29"
              }
            ],
            "name": "addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5880,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5897,
                  "src": "2505:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2505:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5882,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 5897,
                  "src": "2522:17:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5881,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2522:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2504:36:29"
            },
            "returnParameters": {
              "id": 5890,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:0:29"
            },
            "scope": 6259,
            "src": "2474:174:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5912,
              "nodeType": "Block",
              "src": "2910:35:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5909,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5899,
                        "src": "2933:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5908,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6229,
                      "src": "2914:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2914:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5911,
                  "nodeType": "ExpressionStatement",
                  "src": "2914:27:29"
                }
              ]
            },
            "documentation": null,
            "id": 5913,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5902,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5901,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2858:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2858:14:29"
              },
              {
                "arguments": null,
                "id": 5904,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5903,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2875:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2875:17:29"
              },
              {
                "arguments": null,
                "id": 5906,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5905,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2895:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2895:13:29"
              }
            ],
            "name": "removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5899,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5913,
                  "src": "2830:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5898,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2830:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2829:17:29"
            },
            "returnParameters": {
              "id": 5907,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2910:0:29"
            },
            "scope": 6259,
            "src": "2803:142:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5923,
              "nodeType": "Block",
              "src": "3056:38:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5919,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "3079:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3079:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5918,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6229,
                      "src": "3060:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3060:30:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5922,
                  "nodeType": "ExpressionStatement",
                  "src": "3060:30:29"
                }
              ]
            },
            "documentation": null,
            "id": 5924,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5916,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5915,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "3042:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3042:13:29"
              }
            ],
            "name": "renounceWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3032:2:29"
            },
            "returnParameters": {
              "id": 5917,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3056:0:29"
            },
            "scope": 6259,
            "src": "3004:90:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5953,
              "nodeType": "Block",
              "src": "3350:187:29",
              "statements": [
                {
                  "assignments": [
                    5932
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5932,
                      "name": "daysSinceAuthentication",
                      "nodeType": "VariableDeclaration",
                      "scope": 5953,
                      "src": "3354:31:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5931,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3354:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5942,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 5935,
                                "name": "dateAuthenticated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5773,
                                "src": "3401:17:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 5937,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 5936,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5926,
                                "src": "3419:7:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3401:26:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5933,
                              "name": "now",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18009,
                              "src": "3393:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17099,
                            "src": "3393:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3393:35:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 5939,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3388:44:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3435:6:29",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "3388:53:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3354:87:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5943,
                            "name": "daysSinceAuthentication",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5932,
                            "src": "3456:23:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5944,
                            "name": "authenticationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5769,
                            "src": "3483:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3456:47:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 5946,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3455:49:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5949,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5926,
                          "src": "3525:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5947,
                          "name": "whitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5758,
                          "src": "3511:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Role_$16490_storage",
                            "typeString": "struct Roles.Role storage ref"
                          }
                        },
                        "id": 5948,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16576,
                        "src": "3511:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                          "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 5950,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3511:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3455:78:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5930,
                  "id": 5952,
                  "nodeType": "Return",
                  "src": "3445:88:29"
                }
              ]
            },
            "documentation": null,
            "id": 5954,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5927,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5926,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5954,
                  "src": "3306:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5925,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3306:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3305:17:29"
            },
            "returnParameters": {
              "id": 5930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5929,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5954,
                  "src": "3344:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5928,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3344:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3343:6:29"
            },
            "scope": 6259,
            "src": "3283:254:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5965,
              "nodeType": "Block",
              "src": "3765:41:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5961,
                      "name": "dateAuthenticated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5773,
                      "src": "3776:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5963,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5962,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5956,
                      "src": "3794:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3776:26:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5960,
                  "id": 5964,
                  "nodeType": "Return",
                  "src": "3769:33:29"
                }
              ]
            },
            "documentation": null,
            "id": 5966,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lastAuthenticated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5956,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5966,
                  "src": "3718:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5955,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3718:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3717:17:29"
            },
            "returnParameters": {
              "id": 5960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5959,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5966,
                  "src": "3756:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3756:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3755:9:29"
            },
            "scope": 6259,
            "src": "3691:115:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5987,
              "nodeType": "Block",
              "src": "5108:62:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5980,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5968,
                        "src": "5126:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5977,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "5112:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5979,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "5112:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5112:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5982,
                  "nodeType": "ExpressionStatement",
                  "src": "5112:22:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5984,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5968,
                        "src": "5158:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5983,
                      "name": "BlacklistAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5789,
                      "src": "5143:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5143:23:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5986,
                  "nodeType": "EmitStatement",
                  "src": "5138:28:29"
                }
              ]
            },
            "documentation": null,
            "id": 5988,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5971,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5970,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5056:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5056:14:29"
              },
              {
                "arguments": null,
                "id": 5973,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5972,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5073:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5073:17:29"
              },
              {
                "arguments": null,
                "id": 5975,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5974,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5093:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5093:13:29"
              }
            ],
            "name": "addBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5968,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "5028:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5967,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5028:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5027:17:29"
            },
            "returnParameters": {
              "id": 5976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5108:0:29"
            },
            "scope": 6259,
            "src": "5004:166:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6009,
              "nodeType": "Block",
              "src": "5431:67:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6002,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5990,
                        "src": "5452:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5999,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "5435:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6001,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "5435:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5435:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6004,
                  "nodeType": "ExpressionStatement",
                  "src": "5435:25:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6006,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5990,
                        "src": "5486:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6005,
                      "name": "BlacklistRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5793,
                      "src": "5469:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5469:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6008,
                  "nodeType": "EmitStatement",
                  "src": "5464:30:29"
                }
              ]
            },
            "documentation": null,
            "id": 6010,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5993,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5992,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5379:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5379:14:29"
              },
              {
                "arguments": null,
                "id": 5995,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5994,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5396:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5396:17:29"
              },
              {
                "arguments": null,
                "id": 5997,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5996,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5416:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5416:13:29"
              }
            ],
            "name": "removeBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5990,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6010,
                  "src": "5351:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5989,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5351:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5350:17:29"
            },
            "returnParameters": {
              "id": 5998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5431:0:29"
            },
            "scope": 6259,
            "src": "5324:174:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6042,
              "nodeType": "Block",
              "src": "5702:157:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6023,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6012,
                            "src": "5725:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6022,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6258,
                          "src": "5714:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 6024,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5714:19:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2061646472657373206973206e6f74206120636f6e7472616374",
                        "id": 6025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5735:33:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        },
                        "value": "Given address is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        }
                      ],
                      "id": 6021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "5706:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5706:63:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6027,
                  "nodeType": "ExpressionStatement",
                  "src": "5706:63:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6031,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6012,
                        "src": "5787:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6028,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5760,
                        "src": "5773:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "5773:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5773:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6033,
                  "nodeType": "ExpressionStatement",
                  "src": "5773:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6035,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6012,
                        "src": "5815:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6034,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6123,
                      "src": "5799:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5799:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6037,
                  "nodeType": "ExpressionStatement",
                  "src": "5799:24:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6039,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6012,
                        "src": "5847:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6038,
                      "name": "ContractAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5805,
                      "src": "5833:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5833:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6041,
                  "nodeType": "EmitStatement",
                  "src": "5828:27:29"
                }
              ]
            },
            "documentation": null,
            "id": 6043,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6015,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6014,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5650:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5650:14:29"
              },
              {
                "arguments": null,
                "id": 6017,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6016,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5667:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5667:17:29"
              },
              {
                "arguments": null,
                "id": 6019,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6018,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5687:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5687:13:29"
              }
            ],
            "name": "addContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6013,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6012,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6043,
                  "src": "5622:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6011,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5622:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5621:17:29"
            },
            "returnParameters": {
              "id": 6020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5702:0:29"
            },
            "scope": 6259,
            "src": "5601:258:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6068,
              "nodeType": "Block",
              "src": "6071:98:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6057,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6045,
                        "src": "6092:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6054,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5760,
                        "src": "6075:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6056,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "6075:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6075:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6059,
                  "nodeType": "ExpressionStatement",
                  "src": "6075:25:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6061,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6045,
                        "src": "6123:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6060,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6229,
                      "src": "6104:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6104:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6063,
                  "nodeType": "ExpressionStatement",
                  "src": "6104:27:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6065,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6045,
                        "src": "6157:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6064,
                      "name": "ContractRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5809,
                      "src": "6141:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6141:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6067,
                  "nodeType": "EmitStatement",
                  "src": "6136:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 6069,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6048,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6047,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "6019:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6019:14:29"
              },
              {
                "arguments": null,
                "id": 6050,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6049,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "6036:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6036:17:29"
              },
              {
                "arguments": null,
                "id": 6052,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6051,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "6056:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6056:13:29"
              }
            ],
            "name": "removeContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6045,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6069,
                  "src": "5991:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5991:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5990:17:29"
            },
            "returnParameters": {
              "id": 6053,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6071:0:29"
            },
            "scope": 6259,
            "src": "5967:202:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6081,
              "nodeType": "Block",
              "src": "6407:37:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6078,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6071,
                        "src": "6432:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6076,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5760,
                        "src": "6418:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6077,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "6418:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 6079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6418:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6075,
                  "id": 6080,
                  "nodeType": "Return",
                  "src": "6411:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 6082,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isDAOContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6071,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "6363:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6363:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6362:17:29"
            },
            "returnParameters": {
              "id": 6075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6074,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "6401:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6073,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6401:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6400:6:29"
            },
            "scope": 6259,
            "src": "6340:104:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6122,
              "nodeType": "Block",
              "src": "6590:219:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6090,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6608:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6087,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5758,
                        "src": "6594:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6089,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "6594:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6594:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6092,
                  "nodeType": "ExpressionStatement",
                  "src": "6594:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6093,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5763,
                      "src": "6621:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6641:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6621:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6096,
                  "nodeType": "ExpressionStatement",
                  "src": "6621:21:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6097,
                        "name": "dateAdded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5777,
                        "src": "6646:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6099,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6098,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6656:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6646:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6100,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "6667:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6646:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6102,
                  "nodeType": "ExpressionStatement",
                  "src": "6646:24:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6103,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "6674:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6105,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6104,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6692:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6674:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6106,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "6703:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6674:32:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6108,
                  "nodeType": "ExpressionStatement",
                  "src": "6674:32:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6110,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6726:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6109,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6258,
                      "src": "6715:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6715:19:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6117,
                  "nodeType": "IfStatement",
                  "src": "6711:60:29",
                  "trueBody": {
                    "id": 6116,
                    "nodeType": "Block",
                    "src": "6736:35:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6112,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5766,
                            "src": "6741:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 6113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6765:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "6741:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6115,
                        "nodeType": "ExpressionStatement",
                        "src": "6741:25:29"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6119,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6797:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6118,
                      "name": "WhitelistedAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5797,
                      "src": "6780:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6780:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6121,
                  "nodeType": "EmitStatement",
                  "src": "6775:30:29"
                }
              ]
            },
            "documentation": null,
            "id": 6123,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6084,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6123,
                  "src": "6564:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6564:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6563:17:29"
            },
            "returnParameters": {
              "id": 6086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6590:0:29"
            },
            "scope": 6259,
            "src": "6539:270:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6165,
              "nodeType": "Block",
              "src": "7033:226:29",
              "statements": [
                {
                  "assignments": [
                    6131
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6131,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6165,
                      "src": "7037:13:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6130,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7037:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6137,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6134,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6127,
                            "src": "7069:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 6133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7063:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 6135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7063:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6132,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "7053:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 6136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7053:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7037:37:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6139,
                            "name": "didHashToAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5785,
                            "src": "7090:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 6141,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6140,
                            "name": "pHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6131,
                            "src": "7107:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7090:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6143,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7125:1:29",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7117:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7117:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7090:37:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44494420616c72656164792072656769737465726564",
                        "id": 6146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7132:24:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        },
                        "value": "DID already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        }
                      ],
                      "id": 6138,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "7078:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7078:82:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6148,
                  "nodeType": "ExpressionStatement",
                  "src": "7078:82:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6149,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5781,
                        "src": "7165:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 6151,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6150,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6125,
                        "src": "7175:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7165:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6152,
                      "name": "did",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6127,
                      "src": "7186:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7165:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6154,
                  "nodeType": "ExpressionStatement",
                  "src": "7165:24:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6155,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "7193:16:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 6157,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6156,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6131,
                        "src": "7210:5:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7193:23:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6158,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6125,
                      "src": "7219:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7193:33:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6160,
                  "nodeType": "ExpressionStatement",
                  "src": "7193:33:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6162,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6125,
                        "src": "7247:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6161,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6123,
                      "src": "7231:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7231:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6164,
                  "nodeType": "ExpressionStatement",
                  "src": "7231:24:29"
                }
              ]
            },
            "documentation": null,
            "id": 6166,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6125,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6166,
                  "src": "6985:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6985:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6127,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 6166,
                  "src": "7002:17:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6126,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7002:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6984:36:29"
            },
            "returnParameters": {
              "id": 6129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7033:0:29"
            },
            "scope": 6259,
            "src": "6953:306:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6228,
              "nodeType": "Block",
              "src": "7413:382:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6174,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7434:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6171,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5758,
                        "src": "7417:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6173,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "7417:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7417:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6176,
                  "nodeType": "ExpressionStatement",
                  "src": "7417:25:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6177,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5763,
                      "src": "7447:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7467:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7447:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6180,
                  "nodeType": "ExpressionStatement",
                  "src": "7447:21:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7472:33:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6181,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "7479:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6183,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6182,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7497:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7479:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6185,
                  "nodeType": "ExpressionStatement",
                  "src": "7472:33:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6187,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7525:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6186,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6258,
                      "src": "7514:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7514:19:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6194,
                  "nodeType": "IfStatement",
                  "src": "7510:60:29",
                  "trueBody": {
                    "id": 6193,
                    "nodeType": "Block",
                    "src": "7535:35:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6189,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5766,
                            "src": "7540:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 6190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7564:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7540:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6192,
                        "nodeType": "ExpressionStatement",
                        "src": "7540:25:29"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6196,
                      "name": "did",
                      "nodeType": "VariableDeclaration",
                      "scope": 6228,
                      "src": "7574:17:29",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 6195,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "7574:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6200,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6197,
                      "name": "addrToDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5781,
                      "src": "7594:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                        "typeString": "mapping(address => string storage ref)"
                      }
                    },
                    "id": 6199,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6198,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6168,
                      "src": "7604:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7594:18:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7574:38:29"
                },
                {
                  "assignments": [
                    6202
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6202,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6228,
                      "src": "7616:13:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6201,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7616:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6208,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6205,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6196,
                            "src": "7648:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 6204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7642:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 6206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7642:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6203,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "7632:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 6207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7632:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7616:37:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7658:33:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6209,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "7665:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6211,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6210,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7683:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7665:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6213,
                  "nodeType": "ExpressionStatement",
                  "src": "7658:33:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7695:25:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6214,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5781,
                        "src": "7702:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 6216,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6215,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7712:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7702:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6218,
                  "nodeType": "ExpressionStatement",
                  "src": "7695:25:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7724:30:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6219,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "7731:16:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 6221,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6220,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7748:5:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7731:23:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6223,
                  "nodeType": "ExpressionStatement",
                  "src": "7724:30:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6225,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7783:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6224,
                      "name": "WhitelistedRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5801,
                      "src": "7764:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7764:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6227,
                  "nodeType": "EmitStatement",
                  "src": "7759:32:29"
                }
              ]
            },
            "documentation": null,
            "id": 6229,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6168,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6229,
                  "src": "7387:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7387:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7386:17:29"
            },
            "returnParameters": {
              "id": 6170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7413:0:29"
            },
            "scope": 6259,
            "src": "7359:436:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6241,
              "nodeType": "Block",
              "src": "8059:37:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6238,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6231,
                        "src": "8084:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6236,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "8070:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6237,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "8070:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 6239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8070:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6235,
                  "id": 6240,
                  "nodeType": "Return",
                  "src": "8063:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 6242,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6231,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6242,
                  "src": "8015:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6230,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8015:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8014:17:29"
            },
            "returnParameters": {
              "id": 6235,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6234,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6242,
                  "src": "8053:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6233,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8053:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8052:6:29"
            },
            "scope": 6259,
            "src": "7992:104:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6257,
              "nodeType": "Block",
              "src": "8266:92:29",
              "statements": [
                {
                  "assignments": [
                    6250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6250,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 6257,
                      "src": "8270:14:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6249,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8270:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6251,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8270:14:29"
                },
                {
                  "externalReferences": [
                    {
                      "length": {
                        "declaration": 6250,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8302:6:29",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 6244,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8324:5:29",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 6252,
                  "nodeType": "InlineAssembly",
                  "operations": "{ length := extcodesize(_addr) }",
                  "src": "8288:46:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6253,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6250,
                      "src": "8344:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8353:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8344:10:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6248,
                  "id": 6256,
                  "nodeType": "Return",
                  "src": "8337:17:29"
                }
              ]
            },
            "documentation": null,
            "id": 6258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6244,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 6258,
                  "src": "8222:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6243,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8222:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8221:15:29"
            },
            "returnParameters": {
              "id": 6248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6247,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6258,
                  "src": "8260:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6246,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8260:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8259:6:29"
            },
            "scope": 6259,
            "src": "8202:156:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 6260,
        "src": "456:7904:29"
      }
    ],
    "src": "0:8361:29"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityWithOwner.sol",
    "exportedSymbols": {
      "IdentityWithOwner": [
        6259
      ]
    },
    "id": 6260,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5736,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:29"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "openzeppelin-solidity/contracts/access/Roles.sol",
        "id": 5737,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 16578,
        "src": "25:58:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 5738,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 17145,
        "src": "84:59:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 5739,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 16948,
        "src": "144:64:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 5740,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 8542,
        "src": "210:55:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol",
        "file": "../dao/schemes/SchemeGuard.sol",
        "id": 5741,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 4183,
        "src": "267:40:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol",
        "file": "./IdentityAdminRole.sol",
        "id": 5742,
        "nodeType": "ImportDirective",
        "scope": 6260,
        "sourceUnit": 5575,
        "src": "308:33:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5743,
              "name": "IdentityAdminRole",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5574,
              "src": "486:17:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IdentityAdminRole_$5574",
                "typeString": "contract IdentityAdminRole"
              }
            },
            "id": 5744,
            "nodeType": "InheritanceSpecifier",
            "src": "486:17:29"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5745,
              "name": "SchemeGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4182,
              "src": "505:11:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SchemeGuard_$4182",
                "typeString": "contract SchemeGuard"
              }
            },
            "id": 5746,
            "nodeType": "InheritanceSpecifier",
            "src": "505:11:29"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5747,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16947,
              "src": "518:8:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$16947",
                "typeString": "contract Pausable"
              }
            },
            "id": 5748,
            "nodeType": "InheritanceSpecifier",
            "src": "518:8:29"
          }
        ],
        "contractDependencies": [
          4182,
          5574,
          16783,
          16947,
          17253
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 6259,
        "linearizedBaseContracts": [
          6259,
          16947,
          16783,
          4182,
          5574,
          17253
        ],
        "name": "IdentityWithOwner",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5751,
            "libraryName": {
              "contractScope": null,
              "id": 5749,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16577,
              "src": "536:5:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$16577",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "530:27:29",
            "typeName": {
              "contractScope": null,
              "id": 5750,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "546:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "id": 5754,
            "libraryName": {
              "contractScope": null,
              "id": 5752,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 17144,
              "src": "565:8:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$17144",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "559:27:29",
            "typeName": {
              "id": 5753,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "578:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 5756,
            "name": "blacklist",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "589:28:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5755,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "589:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5758,
            "name": "whitelist",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "620:28:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5757,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "620:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5760,
            "name": "contracts",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "651:28:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$16490_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5759,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16490,
              "src": "651:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$16490_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5763,
            "name": "whitelistedCount",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "683:35:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5761,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "683:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 5762,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "717:1:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5766,
            "name": "whitelistedContracts",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "721:39:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5764,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "721:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 5765,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "759:1:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5769,
            "name": "authenticationPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "763:40:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5767,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "763:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3134",
              "id": 5768,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "801:2:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_14_by_1",
                "typeString": "int_const 14"
              },
              "value": "14"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5773,
            "name": "dateAuthenticated",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "807:52:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 5772,
              "keyType": {
                "id": 5770,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "815:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "807:27:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 5771,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "826:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5777,
            "name": "dateAdded",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "862:44:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 5776,
              "keyType": {
                "id": 5774,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "870:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "862:27:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 5775,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "881:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5781,
            "name": "addrToDID",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "910:43:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
              "typeString": "mapping(address => string)"
            },
            "typeName": {
              "id": 5780,
              "keyType": {
                "id": 5778,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "918:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "910:26:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                "typeString": "mapping(address => string)"
              },
              "valueType": {
                "id": 5779,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "929:6:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5785,
            "name": "didHashToAddress",
            "nodeType": "VariableDeclaration",
            "scope": 6259,
            "src": "956:51:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 5784,
              "keyType": {
                "id": 5782,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "964:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "956:27:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 5783,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "975:7:29",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5789,
            "name": "BlacklistAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5787,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5789,
                  "src": "1032:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1032:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1031:25:29"
            },
            "src": "1011:46:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5793,
            "name": "BlacklistRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5791,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5793,
                  "src": "1082:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1082:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1081:25:29"
            },
            "src": "1059:48:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5797,
            "name": "WhitelistedAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5795,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5797,
                  "src": "1133:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5794,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1133:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1132:25:29"
            },
            "src": "1110:48:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5801,
            "name": "WhitelistedRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5799,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5801,
                  "src": "1185:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5798,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1185:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1184:25:29"
            },
            "src": "1160:50:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5805,
            "name": "ContractAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5803,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5805,
                  "src": "1233:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1232:25:29"
            },
            "src": "1213:45:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5809,
            "name": "ContractRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5807,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "1282:23:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1282:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1281:25:29"
            },
            "src": "1260:47:29"
          },
          {
            "body": {
              "id": 5829,
              "nodeType": "Block",
              "src": "1367:57:29",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5819,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5811,
                      "src": "1375:5:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1392:1:29",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 5820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1384:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 5822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1384:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1375:19:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5828,
                  "nodeType": "IfStatement",
                  "src": "1371:49:29",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5825,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5811,
                          "src": "1414:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 5824,
                        "name": "transferOwnership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17229,
                        "src": "1396:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address)"
                        }
                      },
                      "id": 5826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1396:24:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 5827,
                    "nodeType": "ExpressionStatement",
                    "src": "1396:24:29"
                  }
                }
              ]
            },
            "documentation": null,
            "id": 5830,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1363:1:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5814,
                      "name": "Avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8541,
                      "src": "1356:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Avatar_$8541_$",
                        "typeString": "type(contract Avatar)"
                      }
                    },
                    "id": 5816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1356:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$8541",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 5817,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5813,
                  "name": "SchemeGuard",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4182,
                  "src": "1344:11:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_SchemeGuard_$4182_$",
                    "typeString": "type(contract SchemeGuard)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1344:22:29"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5811,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5830,
                  "src": "1322:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5810,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1322:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1321:15:29"
            },
            "returnParameters": {
              "id": 5818,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1367:0:29"
            },
            "scope": 6259,
            "src": "1310:114:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5843,
              "nodeType": "Block",
              "src": "1675:37:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5839,
                      "name": "authenticationPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5769,
                      "src": "1679:20:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5840,
                      "name": "period",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5832,
                      "src": "1702:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1679:29:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5842,
                  "nodeType": "ExpressionStatement",
                  "src": "1679:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 5844,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5835,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5834,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 17187,
                  "src": "1648:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1648:9:29"
              },
              {
                "arguments": null,
                "id": 5837,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5836,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "1660:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1660:13:29"
              }
            ],
            "name": "setAuthenticationPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5833,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5832,
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "scope": 5844,
                  "src": "1621:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5831,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1621:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1620:16:29"
            },
            "returnParameters": {
              "id": 5838,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1675:0:29"
            },
            "scope": 6259,
            "src": "1588:124:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5861,
              "nodeType": "Block",
              "src": "2000:40:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5855,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "2004:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5857,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 5856,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5846,
                        "src": "2022:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2004:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5858,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "2033:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2004:32:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5860,
                  "nodeType": "ExpressionStatement",
                  "src": "2004:32:29"
                }
              ]
            },
            "documentation": null,
            "id": 5862,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5849,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5848,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "1948:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1948:14:29"
              },
              {
                "arguments": null,
                "id": 5851,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5850,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "1965:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1965:17:29"
              },
              {
                "arguments": null,
                "id": 5853,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5852,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "1985:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1985:13:29"
              }
            ],
            "name": "authenticate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5846,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5862,
                  "src": "1920:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5845,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1920:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1919:17:29"
            },
            "returnParameters": {
              "id": 5854,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2000:0:29"
            },
            "scope": 6259,
            "src": "1898:142:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5877,
              "nodeType": "Block",
              "src": "2293:32:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5874,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5864,
                        "src": "2313:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5873,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6123,
                      "src": "2297:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2297:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5876,
                  "nodeType": "ExpressionStatement",
                  "src": "2297:24:29"
                }
              ]
            },
            "documentation": null,
            "id": 5878,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5867,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5866,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2241:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2241:14:29"
              },
              {
                "arguments": null,
                "id": 5869,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5868,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2258:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2258:17:29"
              },
              {
                "arguments": null,
                "id": 5871,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5870,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2278:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2278:13:29"
              }
            ],
            "name": "addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5865,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5864,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5878,
                  "src": "2213:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5863,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2213:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2212:17:29"
            },
            "returnParameters": {
              "id": 5872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2293:0:29"
            },
            "scope": 6259,
            "src": "2189:136:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5896,
              "nodeType": "Block",
              "src": "2604:44:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5892,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5880,
                        "src": "2631:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5893,
                        "name": "did",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5882,
                        "src": "2640:3:29",
                        "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": 5891,
                      "name": "_addWhitelistedWithDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6166,
                      "src": "2608:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 5894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2608:36:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5895,
                  "nodeType": "ExpressionStatement",
                  "src": "2608:36:29"
                }
              ]
            },
            "documentation": null,
            "id": 5897,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5885,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5884,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2552:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2552:14:29"
              },
              {
                "arguments": null,
                "id": 5887,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5886,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2569:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2569:17:29"
              },
              {
                "arguments": null,
                "id": 5889,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5888,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2589:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2589:13:29"
              }
            ],
            "name": "addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5880,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5897,
                  "src": "2505:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2505:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5882,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 5897,
                  "src": "2522:17:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5881,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2522:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2504:36:29"
            },
            "returnParameters": {
              "id": 5890,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:0:29"
            },
            "scope": 6259,
            "src": "2474:174:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5912,
              "nodeType": "Block",
              "src": "2910:35:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5909,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5899,
                        "src": "2933:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5908,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6229,
                      "src": "2914:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2914:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5911,
                  "nodeType": "ExpressionStatement",
                  "src": "2914:27:29"
                }
              ]
            },
            "documentation": null,
            "id": 5913,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5902,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5901,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "2858:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2858:14:29"
              },
              {
                "arguments": null,
                "id": 5904,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5903,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "2875:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2875:17:29"
              },
              {
                "arguments": null,
                "id": 5906,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5905,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "2895:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2895:13:29"
              }
            ],
            "name": "removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5899,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5913,
                  "src": "2830:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5898,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2830:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2829:17:29"
            },
            "returnParameters": {
              "id": 5907,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2910:0:29"
            },
            "scope": 6259,
            "src": "2803:142:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5923,
              "nodeType": "Block",
              "src": "3056:38:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5919,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18007,
                          "src": "3079:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3079:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5918,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6229,
                      "src": "3060:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3060:30:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5922,
                  "nodeType": "ExpressionStatement",
                  "src": "3060:30:29"
                }
              ]
            },
            "documentation": null,
            "id": 5924,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5916,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5915,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "3042:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3042:13:29"
              }
            ],
            "name": "renounceWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3032:2:29"
            },
            "returnParameters": {
              "id": 5917,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3056:0:29"
            },
            "scope": 6259,
            "src": "3004:90:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5953,
              "nodeType": "Block",
              "src": "3350:187:29",
              "statements": [
                {
                  "assignments": [
                    5932
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5932,
                      "name": "daysSinceAuthentication",
                      "nodeType": "VariableDeclaration",
                      "scope": 5953,
                      "src": "3354:31:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5931,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3354:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5942,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 5935,
                                "name": "dateAuthenticated",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5773,
                                "src": "3401:17:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 5937,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 5936,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5926,
                                "src": "3419:7:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3401:26:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5933,
                              "name": "now",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18009,
                              "src": "3393:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17099,
                            "src": "3393:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3393:35:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 5939,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3388:44:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3435:6:29",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "3388:53:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3354:87:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5943,
                            "name": "daysSinceAuthentication",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5932,
                            "src": "3456:23:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5944,
                            "name": "authenticationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5769,
                            "src": "3483:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3456:47:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 5946,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3455:49:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5949,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5926,
                          "src": "3525:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5947,
                          "name": "whitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5758,
                          "src": "3511:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Role_$16490_storage",
                            "typeString": "struct Roles.Role storage ref"
                          }
                        },
                        "id": 5948,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16576,
                        "src": "3511:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                          "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                        }
                      },
                      "id": 5950,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3511:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3455:78:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5930,
                  "id": 5952,
                  "nodeType": "Return",
                  "src": "3445:88:29"
                }
              ]
            },
            "documentation": null,
            "id": 5954,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5927,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5926,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5954,
                  "src": "3306:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5925,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3306:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3305:17:29"
            },
            "returnParameters": {
              "id": 5930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5929,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5954,
                  "src": "3344:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5928,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3344:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3343:6:29"
            },
            "scope": 6259,
            "src": "3283:254:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5965,
              "nodeType": "Block",
              "src": "3765:41:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 5961,
                      "name": "dateAuthenticated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5773,
                      "src": "3776:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 5963,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 5962,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5956,
                      "src": "3794:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3776:26:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5960,
                  "id": 5964,
                  "nodeType": "Return",
                  "src": "3769:33:29"
                }
              ]
            },
            "documentation": null,
            "id": 5966,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lastAuthenticated",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5956,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5966,
                  "src": "3718:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5955,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3718:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3717:17:29"
            },
            "returnParameters": {
              "id": 5960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5959,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5966,
                  "src": "3756:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3756:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3755:9:29"
            },
            "scope": 6259,
            "src": "3691:115:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5987,
              "nodeType": "Block",
              "src": "5108:62:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5980,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5968,
                        "src": "5126:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5977,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "5112:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5979,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "5112:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5112:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5982,
                  "nodeType": "ExpressionStatement",
                  "src": "5112:22:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5984,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5968,
                        "src": "5158:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5983,
                      "name": "BlacklistAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5789,
                      "src": "5143:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5143:23:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5986,
                  "nodeType": "EmitStatement",
                  "src": "5138:28:29"
                }
              ]
            },
            "documentation": null,
            "id": 5988,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5971,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5970,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5056:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5056:14:29"
              },
              {
                "arguments": null,
                "id": 5973,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5972,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5073:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5073:17:29"
              },
              {
                "arguments": null,
                "id": 5975,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5974,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5093:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5093:13:29"
              }
            ],
            "name": "addBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5968,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5988,
                  "src": "5028:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5967,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5028:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5027:17:29"
            },
            "returnParameters": {
              "id": 5976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5108:0:29"
            },
            "scope": 6259,
            "src": "5004:166:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6009,
              "nodeType": "Block",
              "src": "5431:67:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6002,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5990,
                        "src": "5452:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5999,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "5435:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6001,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "5435:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5435:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6004,
                  "nodeType": "ExpressionStatement",
                  "src": "5435:25:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6006,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5990,
                        "src": "5486:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6005,
                      "name": "BlacklistRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5793,
                      "src": "5469:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5469:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6008,
                  "nodeType": "EmitStatement",
                  "src": "5464:30:29"
                }
              ]
            },
            "documentation": null,
            "id": 6010,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5993,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5992,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5379:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5379:14:29"
              },
              {
                "arguments": null,
                "id": 5995,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5994,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5396:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5396:17:29"
              },
              {
                "arguments": null,
                "id": 5997,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5996,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5416:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5416:13:29"
              }
            ],
            "name": "removeBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5990,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6010,
                  "src": "5351:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5989,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5351:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5350:17:29"
            },
            "returnParameters": {
              "id": 5998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5431:0:29"
            },
            "scope": 6259,
            "src": "5324:174:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6042,
              "nodeType": "Block",
              "src": "5702:157:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6023,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6012,
                            "src": "5725:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6022,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6258,
                          "src": "5714:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 6024,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5714:19:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "476976656e2061646472657373206973206e6f74206120636f6e7472616374",
                        "id": 6025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5735:33:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        },
                        "value": "Given address is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c016cb8d50f495ff112d56868bcdc02233dd830483c688e57c25753f3ef679bb",
                          "typeString": "literal_string \"Given address is not a contract\""
                        }
                      ],
                      "id": 6021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "5706:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5706:63:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6027,
                  "nodeType": "ExpressionStatement",
                  "src": "5706:63:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6031,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6012,
                        "src": "5787:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6028,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5760,
                        "src": "5773:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "5773:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5773:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6033,
                  "nodeType": "ExpressionStatement",
                  "src": "5773:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6035,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6012,
                        "src": "5815:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6034,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6123,
                      "src": "5799:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5799:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6037,
                  "nodeType": "ExpressionStatement",
                  "src": "5799:24:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6039,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6012,
                        "src": "5847:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6038,
                      "name": "ContractAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5805,
                      "src": "5833:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5833:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6041,
                  "nodeType": "EmitStatement",
                  "src": "5828:27:29"
                }
              ]
            },
            "documentation": null,
            "id": 6043,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6015,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6014,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "5650:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5650:14:29"
              },
              {
                "arguments": null,
                "id": 6017,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6016,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "5667:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5667:17:29"
              },
              {
                "arguments": null,
                "id": 6019,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6018,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "5687:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5687:13:29"
              }
            ],
            "name": "addContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6013,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6012,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6043,
                  "src": "5622:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6011,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5622:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5621:17:29"
            },
            "returnParameters": {
              "id": 6020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5702:0:29"
            },
            "scope": 6259,
            "src": "5601:258:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6068,
              "nodeType": "Block",
              "src": "6071:98:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6057,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6045,
                        "src": "6092:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6054,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5760,
                        "src": "6075:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6056,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "6075:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6075:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6059,
                  "nodeType": "ExpressionStatement",
                  "src": "6075:25:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6061,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6045,
                        "src": "6123:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6060,
                      "name": "_removeWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6229,
                      "src": "6104:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6104:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6063,
                  "nodeType": "ExpressionStatement",
                  "src": "6104:27:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6065,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6045,
                        "src": "6157:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6064,
                      "name": "ContractRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5809,
                      "src": "6141:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6141:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6067,
                  "nodeType": "EmitStatement",
                  "src": "6136:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 6069,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6048,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6047,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4094,
                  "src": "6019:14:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6019:14:29"
              },
              {
                "arguments": null,
                "id": 6050,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6049,
                  "name": "onlyIdentityAdmin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5487,
                  "src": "6036:17:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6036:17:29"
              },
              {
                "arguments": null,
                "id": 6052,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6051,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16904,
                  "src": "6056:13:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6056:13:29"
              }
            ],
            "name": "removeContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6045,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6069,
                  "src": "5991:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5991:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5990:17:29"
            },
            "returnParameters": {
              "id": 6053,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6071:0:29"
            },
            "scope": 6259,
            "src": "5967:202:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6081,
              "nodeType": "Block",
              "src": "6407:37:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6078,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6071,
                        "src": "6432:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6076,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5760,
                        "src": "6418:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6077,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "6418:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 6079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6418:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6075,
                  "id": 6080,
                  "nodeType": "Return",
                  "src": "6411:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 6082,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isDAOContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6071,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "6363:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6363:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6362:17:29"
            },
            "returnParameters": {
              "id": 6075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6074,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6082,
                  "src": "6401:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6073,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6401:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6400:6:29"
            },
            "scope": 6259,
            "src": "6340:104:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6122,
              "nodeType": "Block",
              "src": "6590:219:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6090,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6608:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6087,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5758,
                        "src": "6594:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6089,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16522,
                      "src": "6594:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6594:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6092,
                  "nodeType": "ExpressionStatement",
                  "src": "6594:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6093,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5763,
                      "src": "6621:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6641:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "6621:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6096,
                  "nodeType": "ExpressionStatement",
                  "src": "6621:21:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6097,
                        "name": "dateAdded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5777,
                        "src": "6646:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6099,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6098,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6656:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6646:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6100,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "6667:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6646:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6102,
                  "nodeType": "ExpressionStatement",
                  "src": "6646:24:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6103,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "6674:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6105,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6104,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6692:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6674:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6106,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18009,
                      "src": "6703:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6674:32:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6108,
                  "nodeType": "ExpressionStatement",
                  "src": "6674:32:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6110,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6726:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6109,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6258,
                      "src": "6715:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6715:19:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6117,
                  "nodeType": "IfStatement",
                  "src": "6711:60:29",
                  "trueBody": {
                    "id": 6116,
                    "nodeType": "Block",
                    "src": "6736:35:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6112,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5766,
                            "src": "6741:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 6113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6765:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "6741:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6115,
                        "nodeType": "ExpressionStatement",
                        "src": "6741:25:29"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6119,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6084,
                        "src": "6797:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6118,
                      "name": "WhitelistedAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5797,
                      "src": "6780:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6780:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6121,
                  "nodeType": "EmitStatement",
                  "src": "6775:30:29"
                }
              ]
            },
            "documentation": null,
            "id": 6123,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6084,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6123,
                  "src": "6564:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6083,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6564:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6563:17:29"
            },
            "returnParameters": {
              "id": 6086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6590:0:29"
            },
            "scope": 6259,
            "src": "6539:270:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6165,
              "nodeType": "Block",
              "src": "7033:226:29",
              "statements": [
                {
                  "assignments": [
                    6131
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6131,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6165,
                      "src": "7037:13:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6130,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7037:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6137,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6134,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6127,
                            "src": "7069:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 6133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7063:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 6135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7063:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6132,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "7053:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 6136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7053:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7037:37:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6139,
                            "name": "didHashToAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5785,
                            "src": "7090:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                              "typeString": "mapping(bytes32 => address)"
                            }
                          },
                          "id": 6141,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6140,
                            "name": "pHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6131,
                            "src": "7107:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7090:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6143,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7125:1:29",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7117:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 6144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7117:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7090:37:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "44494420616c72656164792072656769737465726564",
                        "id": 6146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7132:24:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        },
                        "value": "DID already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_761cab18940f21d9559eeced38da846400e6144eb9c0e8f0f4c044714a4f97c4",
                          "typeString": "literal_string \"DID already registered\""
                        }
                      ],
                      "id": 6138,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18010,
                        18011
                      ],
                      "referencedDeclaration": 18011,
                      "src": "7078:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7078:82:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6148,
                  "nodeType": "ExpressionStatement",
                  "src": "7078:82:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6149,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5781,
                        "src": "7165:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 6151,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6150,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6125,
                        "src": "7175:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7165:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6152,
                      "name": "did",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6127,
                      "src": "7186:3:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7165:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6154,
                  "nodeType": "ExpressionStatement",
                  "src": "7165:24:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6155,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "7193:16:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 6157,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6156,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6131,
                        "src": "7210:5:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7193:23:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6158,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6125,
                      "src": "7219:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7193:33:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6160,
                  "nodeType": "ExpressionStatement",
                  "src": "7193:33:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6162,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6125,
                        "src": "7247:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6161,
                      "name": "_addWhitelisted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6123,
                      "src": "7231:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7231:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6164,
                  "nodeType": "ExpressionStatement",
                  "src": "7231:24:29"
                }
              ]
            },
            "documentation": null,
            "id": 6166,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addWhitelistedWithDID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6125,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6166,
                  "src": "6985:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6985:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6127,
                  "name": "did",
                  "nodeType": "VariableDeclaration",
                  "scope": 6166,
                  "src": "7002:17:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6126,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7002:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6984:36:29"
            },
            "returnParameters": {
              "id": 6129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7033:0:29"
            },
            "scope": 6259,
            "src": "6953:306:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6228,
              "nodeType": "Block",
              "src": "7413:382:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6174,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7434:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6171,
                        "name": "whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5758,
                        "src": "7417:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6173,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16553,
                      "src": "7417:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 6175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7417:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6176,
                  "nodeType": "ExpressionStatement",
                  "src": "7417:25:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6177,
                      "name": "whitelistedCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5763,
                      "src": "7447:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7467:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7447:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6180,
                  "nodeType": "ExpressionStatement",
                  "src": "7447:21:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7472:33:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6181,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "7479:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6183,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6182,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7497:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7479:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6185,
                  "nodeType": "ExpressionStatement",
                  "src": "7472:33:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6187,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7525:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6186,
                      "name": "isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6258,
                      "src": "7514:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7514:19:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6194,
                  "nodeType": "IfStatement",
                  "src": "7510:60:29",
                  "trueBody": {
                    "id": 6193,
                    "nodeType": "Block",
                    "src": "7535:35:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6189,
                            "name": "whitelistedContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5766,
                            "src": "7540:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 6190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7564:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7540:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6192,
                        "nodeType": "ExpressionStatement",
                        "src": "7540:25:29"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6196,
                      "name": "did",
                      "nodeType": "VariableDeclaration",
                      "scope": 6228,
                      "src": "7574:17:29",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 6195,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "7574:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6200,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 6197,
                      "name": "addrToDID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5781,
                      "src": "7594:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                        "typeString": "mapping(address => string storage ref)"
                      }
                    },
                    "id": 6199,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6198,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6168,
                      "src": "7604:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7594:18:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7574:38:29"
                },
                {
                  "assignments": [
                    6202
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6202,
                      "name": "pHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 6228,
                      "src": "7616:13:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6201,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7616:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6208,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6205,
                            "name": "did",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6196,
                            "src": "7648:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 6204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7642:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": "bytes"
                        },
                        "id": 6206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7642:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 6203,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18001,
                      "src": "7632:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 6207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7632:21:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7616:37:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7658:33:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6209,
                        "name": "dateAuthenticated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5773,
                        "src": "7665:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6211,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6210,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7683:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7665:26:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6213,
                  "nodeType": "ExpressionStatement",
                  "src": "7658:33:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7695:25:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6214,
                        "name": "addrToDID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5781,
                        "src": "7702:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_string_storage_$",
                          "typeString": "mapping(address => string storage ref)"
                        }
                      },
                      "id": 6216,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6215,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7712:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7702:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6218,
                  "nodeType": "ExpressionStatement",
                  "src": "7695:25:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "7724:30:29",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6219,
                        "name": "didHashToAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "7731:16:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 6221,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6220,
                        "name": "pHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6202,
                        "src": "7748:5:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7731:23:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6223,
                  "nodeType": "ExpressionStatement",
                  "src": "7724:30:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6225,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6168,
                        "src": "7783:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6224,
                      "name": "WhitelistedRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5801,
                      "src": "7764:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7764:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6227,
                  "nodeType": "EmitStatement",
                  "src": "7759:32:29"
                }
              ]
            },
            "documentation": null,
            "id": 6229,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeWhitelisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6168,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6229,
                  "src": "7387:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7387:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7386:17:29"
            },
            "returnParameters": {
              "id": 6170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7413:0:29"
            },
            "scope": 6259,
            "src": "7359:436:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6241,
              "nodeType": "Block",
              "src": "8059:37:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6238,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6231,
                        "src": "8084:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6236,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5756,
                        "src": "8070:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$16490_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 6237,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16576,
                      "src": "8070:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$16490_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$16490_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 6239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8070:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6235,
                  "id": 6240,
                  "nodeType": "Return",
                  "src": "8063:29:29"
                }
              ]
            },
            "documentation": null,
            "id": 6242,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6231,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 6242,
                  "src": "8015:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6230,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8015:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8014:17:29"
            },
            "returnParameters": {
              "id": 6235,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6234,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6242,
                  "src": "8053:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6233,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8053:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8052:6:29"
            },
            "scope": 6259,
            "src": "7992:104:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6257,
              "nodeType": "Block",
              "src": "8266:92:29",
              "statements": [
                {
                  "assignments": [
                    6250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6250,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 6257,
                      "src": "8270:14:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6249,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8270:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6251,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8270:14:29"
                },
                {
                  "externalReferences": [
                    {
                      "length": {
                        "declaration": 6250,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8302:6:29",
                        "valueSize": 1
                      }
                    },
                    {
                      "_addr": {
                        "declaration": 6244,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8324:5:29",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 6252,
                  "nodeType": "InlineAssembly",
                  "operations": "{ length := extcodesize(_addr) }",
                  "src": "8288:46:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6253,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6250,
                      "src": "8344:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 6254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8353:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8344:10:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6248,
                  "id": 6256,
                  "nodeType": "Return",
                  "src": "8337:17:29"
                }
              ]
            },
            "documentation": null,
            "id": 6258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6244,
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 6258,
                  "src": "8222:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6243,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8222:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8221:15:29"
            },
            "returnParameters": {
              "id": 6248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6247,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6258,
                  "src": "8260:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6246,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8260:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8259:6:29"
            },
            "scope": 6259,
            "src": "8202:156:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 6260,
        "src": "456:7904:29"
      }
    ],
    "src": "0:8361:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2022-10-27T11:34:11.222Z",
  "devdoc": {
    "methods": {
      "addIdentityAdmin(address)": {
        "details": "Adds a identity admin account. Is only callable by owner.",
        "params": {
          "account": "Address to be added"
        },
        "return": "true if successful"
      },
      "isIdentityAdmin(address)": {
        "details": "Checks if account is identity admin",
        "params": {
          "account": "Account to check"
        },
        "return": "Boolean indicating if account is identity admin"
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "isRegistered()": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "isRegistered(address)": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "pause()": {
        "details": "called by the owner to pause, triggers stopped state"
      },
      "paused()": {
        "return": "true if the contract is paused, false otherwise."
      },
      "removeIdentityAdmin(address)": {
        "details": "Removes a identity admin account. Is only callable by owner.",
        "params": {
          "account": "Address to be removed"
        },
        "return": "true if successful"
      },
      "renounceIdentityAdmin()": {
        "details": "Allows an admin to renounce their role"
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "setAvatar(address)": {
        "details": "Function to set a new avatar and controller for scheme can only be done by owner of scheme"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      },
      "unpause()": {
        "details": "called by the owner to unpause, returns to normal state"
      }
    }
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}