{
  "contractName": "OperatorRole",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OperatorAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OperatorRemoved",
      "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"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "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": "renounceOwnership",
      "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": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addOperator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeOperator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOperator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OperatorRemoved\",\"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\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"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\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOperator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"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\"}],\"devdoc\":{\"methods\":{\"initialize(address)\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{},\"notice\":\"allows a single owner to manage a group of operators which may have some special permissions in the contract.\"}},\"settings\":{\"compilationTarget\":{\"/home/circleci/repo/contracts/mixins/OperatorRole.sol\":\"OperatorRole\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/circleci/repo/contracts/mixins/OperatorRole.sol\":{\"keccak256\":\"0xf0f3f799ce6de866f1295832a1608fd6776d1ef79a54a99930b1916675f4db54\",\"urls\":[\"bzz-raw://0872ce4dbb377ab3518709c2dcb30ff317943f3df10933e23df72cff97c66fc3\",\"dweb:/ipfs/QmWHHgKU4vK2h8wAbig5StpVhM97FWJUvFf1RcbXcdTEEW\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0x3491510fa4862af1a43f6c860d9cf7392240196540cd3c0eea79d374d419c5a1\",\"urls\":[\"bzz-raw://3e51386d74eb723d3acaaddafce1dd0b4082ad4c10ddba6b9fc154aad2930d02\",\"dweb:/ipfs/QmcA8Huap1c7YjdVjx5TGasxKNMLgsa3XyLvQUaMa1nMt8\"]},\"@openzeppelin/contracts-ethereum-package/contracts/access/Roles.sol\":{\"keccak256\":\"0xb002c378d7b82a101bd659c341518953ca0919d342c0a400196982c0e7e7bcdb\",\"urls\":[\"bzz-raw://00a788c4631466c220b385bdd100c571d24b2deccd657615cfbcef6cadf669a4\",\"dweb:/ipfs/QmTEwDbjJNxmMNCDMqtuou3dyM8Wtp8Q9NFvn7SAVM7Jf3\"]},\"@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xd7e8ab76fa35c4d8d35a06a6ed538cadab8b75a1aa00594ced1568b2c0cadde3\",\"urls\":[\"bzz-raw://a3f816aa3e6161b4cf882ad34755673848d835f7fb964db49bcef9df14570cef\",\"dweb:/ipfs/QmQACSH1W7pKQnqTAqpuEP8ychp3PvosfnyondLaLE1nVq\"]},\"@openzeppelin/upgrades/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]}},\"version\":1}",
  "bytecode": "0x60806040526107ed806100136000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638f32d59b116100665780638f32d59b146101085780639870d7fe14610110578063ac8a584a14610136578063c4d66de81461015c578063f2fde38b1461018257610093565b80632ab6f8db146100985780636d70f7ae146100a2578063715018a6146100dc5780638da5cb5b146100e4575b600080fd5b6100a06101a8565b005b6100c8600480360360208110156100b857600080fd5b50356001600160a01b03166101b3565b604080519115158252519081900360200190f35b6100a06101cc565b6100ec61025d565b604080516001600160a01b039092168252519081900360200190f35b6100c861026c565b6100a06004803603602081101561012657600080fd5b50356001600160a01b0316610292565b6100a06004803603602081101561014c57600080fd5b50356001600160a01b03166102e5565b6100a06004803603602081101561017257600080fd5b50356001600160a01b0316610335565b6100a06004803603602081101561019857600080fd5b50356001600160a01b0316610427565b6101b133610477565b565b60006101c660668363ffffffff6104bf16565b92915050565b6101d461026c565b610213576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6033546000906001600160a01b0316610283610526565b6001600160a01b031614905090565b61029a61026c565b6102d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6102e28161052a565b50565b6102ed61026c565b61032c576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6102e281610477565b600054610100900460ff168061034e575061034e610572565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e81526020018061078b602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015610423576000805461ff00191690555b5050565b61042f61026c565b61046e576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6102e281610578565b61048860668263ffffffff61061916565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b60006001600160a01b0382166105065760405162461bcd60e51b81526004018080602001828103825260228152602001806107696022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3390565b61053b60668263ffffffff61068016565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b303b1590565b6001600160a01b0381166105bd5760405162461bcd60e51b81526004018080602001828103825260268152602001806107026026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b61062382826104bf565b61065e5760405162461bcd60e51b81526004018080602001828103825260218152602001806107286021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b61068a82826104bf565b156106dc576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff1916600117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a265627a7a72315820fecccec9a2bce4bfde70f45c3c67829cdae82828f0f006595f345fdebfa47d7664736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638f32d59b116100665780638f32d59b146101085780639870d7fe14610110578063ac8a584a14610136578063c4d66de81461015c578063f2fde38b1461018257610093565b80632ab6f8db146100985780636d70f7ae146100a2578063715018a6146100dc5780638da5cb5b146100e4575b600080fd5b6100a06101a8565b005b6100c8600480360360208110156100b857600080fd5b50356001600160a01b03166101b3565b604080519115158252519081900360200190f35b6100a06101cc565b6100ec61025d565b604080516001600160a01b039092168252519081900360200190f35b6100c861026c565b6100a06004803603602081101561012657600080fd5b50356001600160a01b0316610292565b6100a06004803603602081101561014c57600080fd5b50356001600160a01b03166102e5565b6100a06004803603602081101561017257600080fd5b50356001600160a01b0316610335565b6100a06004803603602081101561019857600080fd5b50356001600160a01b0316610427565b6101b133610477565b565b60006101c660668363ffffffff6104bf16565b92915050565b6101d461026c565b610213576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6033546000906001600160a01b0316610283610526565b6001600160a01b031614905090565b61029a61026c565b6102d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6102e28161052a565b50565b6102ed61026c565b61032c576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6102e281610477565b600054610100900460ff168061034e575061034e610572565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e81526020018061078b602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015610423576000805461ff00191690555b5050565b61042f61026c565b61046e576040805162461bcd60e51b81526020600482018190526024820152600080516020610749833981519152604482015290519081900360640190fd5b6102e281610578565b61048860668263ffffffff61061916565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b60006001600160a01b0382166105065760405162461bcd60e51b81526004018080602001828103825260228152602001806107696022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b3390565b61053b60668263ffffffff61068016565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b303b1590565b6001600160a01b0381166105bd5760405162461bcd60e51b81526004018080602001828103825260268152602001806107026026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b61062382826104bf565b61065e5760405162461bcd60e51b81526004018080602001828103825260218152602001806107286021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b61068a82826104bf565b156106dc576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff1916600117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a265627a7a72315820fecccec9a2bce4bfde70f45c3c67829cdae82828f0f006595f345fdebfa47d7664736f6c63430005110032",
  "sourceMap": "504:1108:8:-;;;;;;;;;",
  "deployedSourceMap": "504:1108:8:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;504:1108:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1260:73;;;:::i;:::-;;963:105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;963:105:8;-1:-1:-1;;;;;963:105:8;;:::i;:::-;;;;;;;;;;;;;;;;;;1746:137:19;;;:::i;959:77::-;;;:::i;:::-;;;;-1:-1:-1;;;;;959:77:19;;;;;;;;;;;;;;1310:92;;;:::i;1072:87:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1072:87:8;-1:-1:-1;;;;;1072:87:8;;:::i;1163:93::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1163:93:8;-1:-1:-1;;;;;1163:93:8;;:::i;741:142:19:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;741:142:19;-1:-1:-1;;;;;741:142:19;;:::i;2032:107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2032:107:19;-1:-1:-1;;;;;2032:107:19;;:::i;1260:73:8:-;1301:27;1317:10;1301:15;:27::i;:::-;1260:73::o;963:105::-;1021:4;1040:23;:10;1055:7;1040:23;:14;:23;:::i;:::-;1033:30;963:105;-1:-1:-1;;963:105:8:o;1746:137:19:-;1163:9;:7;:9::i;:::-;1155:54;;;;;-1:-1:-1;;;1155:54:19;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1155:54:19;;;;;;;;;;;;;;;1828:6;;1807:40;;1844:1;;-1:-1:-1;;;;;1828:6:19;;1807:40;;1844:1;;1807:40;1857:6;:19;;-1:-1:-1;;;;;;1857:19:19;;;1746:137::o;959:77::-;1023:6;;-1:-1:-1;;;;;1023:6:19;959:77;:::o;1310:92::-;1389:6;;1350:4;;-1:-1:-1;;;;;1389:6:19;1373:12;:10;:12::i;:::-;-1:-1:-1;;;;;1373:22:19;;1366:29;;1310:92;:::o;1072:87:8:-;1163:9:19;:7;:9::i;:::-;1155:54;;;;;-1:-1:-1;;;1155:54:19;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1155:54:19;;;;;;;;;;;;;;;1133:21:8;1146:7;1133:12;:21::i;:::-;1072:87;:::o;1163:93::-;:9:19;:7;:9::i;:::-;1155:54;;;;;-1:-1:-1;;;1155:54:19;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1155:54:19;;;;;;;;;;;;;;;1227:24:8;1243:7;1227:15;:24::i;741:142:19:-;1024:12:30;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:30;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:30;;;;;1225:18;1213:4;1225:18;;;1170:80;806:6:19;:15;;-1:-1:-1;;;;;;806:15:19;-1:-1:-1;;;;;806:15:19;;;;;;;;;;;836:40;;869:6;;;-1:-1:-1;;836:40:19;;-1:-1:-1;;836:40:19;1268:14:30;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:30;;;1264:55;741:142:19;;:::o;2032:107::-;1163:9;:7;:9::i;:::-;1155:54;;;;;-1:-1:-1;;;1155:54:19;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1155:54:19;;;;;;;;;;;;;;;2104:28;2123:8;2104:18;:28::i;1456:123:8:-;1513:26;:10;1531:7;1513:26;:17;:26;:::i;:::-;1550:24;;-1:-1:-1;;;;;1550:24:8;;;;;;;;1456:123;:::o;779:200:16:-;851:4;-1:-1:-1;;;;;875:21:16;;867:68;;;;-1:-1:-1;;;867:68:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;952:20:16;:11;:20;;;;;;;;;;;;;;;779:200::o;867:96:15:-;946:10;867:96;:::o;1337:115:8:-;1391:23;:10;1406:7;1391:23;:14;:23;:::i;:::-;1425:22;;-1:-1:-1;;;;;1425:22:8;;;;;;;;1337:115;:::o;1409:498:30:-;1820:4;1864:17;1895:7;1409:498;:::o;2240:225:19:-;-1:-1:-1;;;;;2313:22:19;;2305:73;;;;-1:-1:-1;;;2305:73:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:6;;2393:38;;-1:-1:-1;;;;;2393:38:19;;;;2414:6;;2393:38;;2414:6;;2393:38;2441:6;:17;;-1:-1:-1;;;;;;2441:17:19;-1:-1:-1;;;;;2441:17:19;;;;;;;;;;2240:225::o;510:180:16:-;589:18;593:4;599:7;589:3;:18::i;:::-;581:64;;;;-1:-1:-1;;;581:64:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;655:20:16;678:5;655:20;;;;;;;;;;;:28;;-1:-1:-1;;655:28:16;;;510:180::o;260:175::-;337:18;341:4;347:7;337:3;:18::i;:::-;336:19;328:63;;;;;-1:-1:-1;;;328:63:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;401:20:16;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;401:27:16;424:4;401:27;;;260:175::o",
  "source": "pragma solidity ^0.5.0;\n\n// Original source: openzeppelin's SignerRole\n\nimport \"@openzeppelin/upgrades/contracts/Initializable.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/access/Roles.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol\";\n\n/**\n * @notice allows a single owner to manage a group of operators which may\n * have some special permissions in the contract.\n */\ncontract OperatorRole is Initializable, Context, Ownable {\n  using Roles for Roles.Role;\n\n  event OperatorAdded(address indexed account);\n  event OperatorRemoved(address indexed account);\n\n  Roles.Role private _operators;\n\n  function _initializeOperatorRole() internal {\n    _addOperator(msg.sender);\n  }\n\n  modifier onlyOperator() {\n    require(\n      isOperator(msg.sender),\n      \"OperatorRole: caller does not have the Operator role\"\n    );\n    _;\n  }\n\n  function isOperator(address account) public view returns (bool) {\n    return _operators.has(account);\n  }\n\n  function addOperator(address account) public onlyOwner {\n    _addOperator(account);\n  }\n\n  function removeOperator(address account) public onlyOwner {\n    _removeOperator(account);\n  }\n\n  function renounceOperator() public {\n    _removeOperator(msg.sender);\n  }\n\n  function _addOperator(address account) internal {\n    _operators.add(account);\n    emit OperatorAdded(account);\n  }\n\n  function _removeOperator(address account) internal {\n    _operators.remove(account);\n    emit OperatorRemoved(account);\n  }\n\n  uint[50] private ______gap;\n}\n",
  "sourcePath": "/home/circleci/repo/contracts/mixins/OperatorRole.sol",
  "ast": {
    "absolutePath": "/home/circleci/repo/contracts/mixins/OperatorRole.sol",
    "exportedSymbols": {
      "OperatorRole": [
        5187
      ]
    },
    "id": 5188,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5060,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "@openzeppelin/upgrades/contracts/Initializable.sol",
        "file": "@openzeppelin/upgrades/contracts/Initializable.sol",
        "id": 5061,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 7852,
        "src": "72:60:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol",
        "id": 5062,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 5408,
        "src": "133:76:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/access/Roles.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/access/Roles.sol",
        "id": 5063,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 5489,
        "src": "210:77:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol",
        "id": 5064,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 6194,
        "src": "288:82:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5065,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7851,
              "src": "529:13:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$7851",
                "typeString": "contract Initializable"
              }
            },
            "id": 5066,
            "nodeType": "InheritanceSpecifier",
            "src": "529:13:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5067,
              "name": "Context",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5407,
              "src": "544:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Context_$5407",
                "typeString": "contract Context"
              }
            },
            "id": 5068,
            "nodeType": "InheritanceSpecifier",
            "src": "544:7:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5069,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6193,
              "src": "553:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$6193",
                "typeString": "contract Ownable"
              }
            },
            "id": 5070,
            "nodeType": "InheritanceSpecifier",
            "src": "553:7:8"
          }
        ],
        "contractDependencies": [
          5407,
          6193,
          7851
        ],
        "contractKind": "contract",
        "documentation": "@notice allows a single owner to manage a group of operators which may\nhave some special permissions in the contract.",
        "fullyImplemented": true,
        "id": 5187,
        "linearizedBaseContracts": [
          5187,
          6193,
          5407,
          7851
        ],
        "name": "OperatorRole",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5073,
            "libraryName": {
              "contractScope": null,
              "id": 5071,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5488,
              "src": "571:5:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$5488",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "565:27:8",
            "typeName": {
              "contractScope": null,
              "id": 5072,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5414,
              "src": "581:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$5414_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5077,
            "name": "OperatorAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5075,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5077,
                  "src": "616:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5074,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "616:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "615:25:8"
            },
            "src": "596:45:8"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5081,
            "name": "OperatorRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5079,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5081,
                  "src": "666:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5078,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "666:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "665:25:8"
            },
            "src": "644:47:8"
          },
          {
            "constant": false,
            "id": 5083,
            "name": "_operators",
            "nodeType": "VariableDeclaration",
            "scope": 5187,
            "src": "695:29:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$5414_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5082,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5414,
              "src": "695:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$5414_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 5091,
              "nodeType": "Block",
              "src": "773:35:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5087,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "792:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "792:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5086,
                      "name": "_addOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5166,
                      "src": "779:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "779:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5090,
                  "nodeType": "ExpressionStatement",
                  "src": "779:24:8"
                }
              ]
            },
            "documentation": null,
            "id": 5092,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_initializeOperatorRole",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5084,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "761:2:8"
            },
            "returnParameters": {
              "id": 5085,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "773:0:8"
            },
            "scope": 5187,
            "src": "729:79:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5103,
              "nodeType": "Block",
              "src": "836:123:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5096,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8534,
                              "src": "868:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 5097,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "868:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 5095,
                          "name": "isOperator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5117,
                          "src": "857:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 5098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "857:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f70657261746f72526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204f70657261746f7220726f6c65",
                        "id": 5099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "887:54:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_49d10a114f36d55debe3771eaf3da9644ffbf942300b327e99ab15031f5393f6",
                          "typeString": "literal_string \"OperatorRole: caller does not have the Operator role\""
                        },
                        "value": "OperatorRole: caller does not have the Operator role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_49d10a114f36d55debe3771eaf3da9644ffbf942300b327e99ab15031f5393f6",
                          "typeString": "literal_string \"OperatorRole: caller does not have the Operator role\""
                        }
                      ],
                      "id": 5094,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "842:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "842:105:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5101,
                  "nodeType": "ExpressionStatement",
                  "src": "842:105:8"
                },
                {
                  "id": 5102,
                  "nodeType": "PlaceholderStatement",
                  "src": "953:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 5104,
            "name": "onlyOperator",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 5093,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "833:2:8"
            },
            "src": "812:147:8",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5116,
              "nodeType": "Block",
              "src": "1027:41:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5113,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5106,
                        "src": "1055:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5111,
                        "name": "_operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5083,
                        "src": "1040:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$5414_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5112,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5487,
                      "src": "1040:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$5414_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$5414_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 5114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1040:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5110,
                  "id": 5115,
                  "nodeType": "Return",
                  "src": "1033:30:8"
                }
              ]
            },
            "documentation": null,
            "id": 5117,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5106,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5117,
                  "src": "983:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "983:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "982:17:8"
            },
            "returnParameters": {
              "id": 5110,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5109,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5117,
                  "src": "1021:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5108,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1021:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1020:6:8"
            },
            "scope": 5187,
            "src": "963:105:8",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5128,
              "nodeType": "Block",
              "src": "1127:32:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5125,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5119,
                        "src": "1146:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5124,
                      "name": "_addOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5166,
                      "src": "1133:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1133:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5127,
                  "nodeType": "ExpressionStatement",
                  "src": "1133:21:8"
                }
              ]
            },
            "documentation": null,
            "id": 5129,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5122,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5121,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6122,
                  "src": "1117:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1117:9:8"
              }
            ],
            "name": "addOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5119,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5129,
                  "src": "1093:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1093:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1092:17:8"
            },
            "returnParameters": {
              "id": 5123,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1127:0:8"
            },
            "scope": 5187,
            "src": "1072:87:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5140,
              "nodeType": "Block",
              "src": "1221:35:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5137,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5131,
                        "src": "1243:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5136,
                      "name": "_removeOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5182,
                      "src": "1227:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1227:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5139,
                  "nodeType": "ExpressionStatement",
                  "src": "1227:24:8"
                }
              ]
            },
            "documentation": null,
            "id": 5141,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5134,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5133,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6122,
                  "src": "1211:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1211:9:8"
              }
            ],
            "name": "removeOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5131,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5141,
                  "src": "1187:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1187:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1186:17:8"
            },
            "returnParameters": {
              "id": 5135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1221:0:8"
            },
            "scope": 5187,
            "src": "1163:93:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5149,
              "nodeType": "Block",
              "src": "1295:38:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5145,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "1317:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1317:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5144,
                      "name": "_removeOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5182,
                      "src": "1301:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1301:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5148,
                  "nodeType": "ExpressionStatement",
                  "src": "1301:27:8"
                }
              ]
            },
            "documentation": null,
            "id": 5150,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "renounceOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5142,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1285:2:8"
            },
            "returnParameters": {
              "id": 5143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1295:0:8"
            },
            "scope": 5187,
            "src": "1260:73:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5165,
              "nodeType": "Block",
              "src": "1385:67:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5158,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5152,
                        "src": "1406:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5155,
                        "name": "_operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5083,
                        "src": "1391:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$5414_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5157,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5439,
                      "src": "1391:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$5414_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$5414_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1391:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5160,
                  "nodeType": "ExpressionStatement",
                  "src": "1391:23:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5162,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5152,
                        "src": "1439:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5161,
                      "name": "OperatorAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5077,
                      "src": "1425:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1425:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5164,
                  "nodeType": "EmitStatement",
                  "src": "1420:27:8"
                }
              ]
            },
            "documentation": null,
            "id": 5166,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5152,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5166,
                  "src": "1359:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5151,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1359:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1358:17:8"
            },
            "returnParameters": {
              "id": 5154,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1385:0:8"
            },
            "scope": 5187,
            "src": "1337:115:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5181,
              "nodeType": "Block",
              "src": "1507:72:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5174,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5168,
                        "src": "1531:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5171,
                        "name": "_operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5083,
                        "src": "1513:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$5414_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5173,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5463,
                      "src": "1513:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$5414_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$5414_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1513:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5176,
                  "nodeType": "ExpressionStatement",
                  "src": "1513:26:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5178,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5168,
                        "src": "1566:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5177,
                      "name": "OperatorRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5081,
                      "src": "1550:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1550:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5180,
                  "nodeType": "EmitStatement",
                  "src": "1545:29:8"
                }
              ]
            },
            "documentation": null,
            "id": 5182,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5168,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5182,
                  "src": "1481:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1481:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1480:17:8"
            },
            "returnParameters": {
              "id": 5170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1507:0:8"
            },
            "scope": 5187,
            "src": "1456:123:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5186,
            "name": "______gap",
            "nodeType": "VariableDeclaration",
            "scope": 5187,
            "src": "1583:26:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$50_storage",
              "typeString": "uint256[50]"
            },
            "typeName": {
              "baseType": {
                "id": 5183,
                "name": "uint",
                "nodeType": "ElementaryTypeName",
                "src": "1583:4:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 5185,
              "length": {
                "argumentTypes": null,
                "hexValue": "3530",
                "id": 5184,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1588:2:8",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_50_by_1",
                  "typeString": "int_const 50"
                },
                "value": "50"
              },
              "nodeType": "ArrayTypeName",
              "src": "1583:8:8",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr",
                "typeString": "uint256[50]"
              }
            },
            "value": null,
            "visibility": "private"
          }
        ],
        "scope": 5188,
        "src": "504:1108:8"
      }
    ],
    "src": "0:1613:8"
  },
  "legacyAST": {
    "absolutePath": "/home/circleci/repo/contracts/mixins/OperatorRole.sol",
    "exportedSymbols": {
      "OperatorRole": [
        5187
      ]
    },
    "id": 5188,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5060,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:8"
      },
      {
        "absolutePath": "@openzeppelin/upgrades/contracts/Initializable.sol",
        "file": "@openzeppelin/upgrades/contracts/Initializable.sol",
        "id": 5061,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 7852,
        "src": "72:60:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol",
        "id": 5062,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 5408,
        "src": "133:76:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/access/Roles.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/access/Roles.sol",
        "id": 5063,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 5489,
        "src": "210:77:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol",
        "id": 5064,
        "nodeType": "ImportDirective",
        "scope": 5188,
        "sourceUnit": 6194,
        "src": "288:82:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5065,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7851,
              "src": "529:13:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$7851",
                "typeString": "contract Initializable"
              }
            },
            "id": 5066,
            "nodeType": "InheritanceSpecifier",
            "src": "529:13:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5067,
              "name": "Context",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5407,
              "src": "544:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Context_$5407",
                "typeString": "contract Context"
              }
            },
            "id": 5068,
            "nodeType": "InheritanceSpecifier",
            "src": "544:7:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5069,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6193,
              "src": "553:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$6193",
                "typeString": "contract Ownable"
              }
            },
            "id": 5070,
            "nodeType": "InheritanceSpecifier",
            "src": "553:7:8"
          }
        ],
        "contractDependencies": [
          5407,
          6193,
          7851
        ],
        "contractKind": "contract",
        "documentation": "@notice allows a single owner to manage a group of operators which may\nhave some special permissions in the contract.",
        "fullyImplemented": true,
        "id": 5187,
        "linearizedBaseContracts": [
          5187,
          6193,
          5407,
          7851
        ],
        "name": "OperatorRole",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5073,
            "libraryName": {
              "contractScope": null,
              "id": 5071,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5488,
              "src": "571:5:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$5488",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "565:27:8",
            "typeName": {
              "contractScope": null,
              "id": 5072,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5414,
              "src": "581:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$5414_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5077,
            "name": "OperatorAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5075,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5077,
                  "src": "616:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5074,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "616:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "615:25:8"
            },
            "src": "596:45:8"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5081,
            "name": "OperatorRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5079,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5081,
                  "src": "666:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5078,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "666:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "665:25:8"
            },
            "src": "644:47:8"
          },
          {
            "constant": false,
            "id": 5083,
            "name": "_operators",
            "nodeType": "VariableDeclaration",
            "scope": 5187,
            "src": "695:29:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$5414_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 5082,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5414,
              "src": "695:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$5414_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 5091,
              "nodeType": "Block",
              "src": "773:35:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5087,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "792:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "792:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5086,
                      "name": "_addOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5166,
                      "src": "779:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "779:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5090,
                  "nodeType": "ExpressionStatement",
                  "src": "779:24:8"
                }
              ]
            },
            "documentation": null,
            "id": 5092,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_initializeOperatorRole",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5084,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "761:2:8"
            },
            "returnParameters": {
              "id": 5085,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "773:0:8"
            },
            "scope": 5187,
            "src": "729:79:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5103,
              "nodeType": "Block",
              "src": "836:123:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 5096,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8534,
                              "src": "868:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 5097,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "868:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 5095,
                          "name": "isOperator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5117,
                          "src": "857:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 5098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "857:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f70657261746f72526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204f70657261746f7220726f6c65",
                        "id": 5099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "887:54:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_49d10a114f36d55debe3771eaf3da9644ffbf942300b327e99ab15031f5393f6",
                          "typeString": "literal_string \"OperatorRole: caller does not have the Operator role\""
                        },
                        "value": "OperatorRole: caller does not have the Operator role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_49d10a114f36d55debe3771eaf3da9644ffbf942300b327e99ab15031f5393f6",
                          "typeString": "literal_string \"OperatorRole: caller does not have the Operator role\""
                        }
                      ],
                      "id": 5094,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8537,
                        8538
                      ],
                      "referencedDeclaration": 8538,
                      "src": "842:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "842:105:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5101,
                  "nodeType": "ExpressionStatement",
                  "src": "842:105:8"
                },
                {
                  "id": 5102,
                  "nodeType": "PlaceholderStatement",
                  "src": "953:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 5104,
            "name": "onlyOperator",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 5093,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "833:2:8"
            },
            "src": "812:147:8",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5116,
              "nodeType": "Block",
              "src": "1027:41:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5113,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5106,
                        "src": "1055:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5111,
                        "name": "_operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5083,
                        "src": "1040:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$5414_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5112,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5487,
                      "src": "1040:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$5414_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$5414_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 5114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1040:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5110,
                  "id": 5115,
                  "nodeType": "Return",
                  "src": "1033:30:8"
                }
              ]
            },
            "documentation": null,
            "id": 5117,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5106,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5117,
                  "src": "983:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "983:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "982:17:8"
            },
            "returnParameters": {
              "id": 5110,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5109,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5117,
                  "src": "1021:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5108,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1021:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1020:6:8"
            },
            "scope": 5187,
            "src": "963:105:8",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5128,
              "nodeType": "Block",
              "src": "1127:32:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5125,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5119,
                        "src": "1146:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5124,
                      "name": "_addOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5166,
                      "src": "1133:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1133:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5127,
                  "nodeType": "ExpressionStatement",
                  "src": "1133:21:8"
                }
              ]
            },
            "documentation": null,
            "id": 5129,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5122,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5121,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6122,
                  "src": "1117:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1117:9:8"
              }
            ],
            "name": "addOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5119,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5129,
                  "src": "1093:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1093:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1092:17:8"
            },
            "returnParameters": {
              "id": 5123,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1127:0:8"
            },
            "scope": 5187,
            "src": "1072:87:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5140,
              "nodeType": "Block",
              "src": "1221:35:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5137,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5131,
                        "src": "1243:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5136,
                      "name": "_removeOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5182,
                      "src": "1227:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1227:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5139,
                  "nodeType": "ExpressionStatement",
                  "src": "1227:24:8"
                }
              ]
            },
            "documentation": null,
            "id": 5141,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5134,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5133,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6122,
                  "src": "1211:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1211:9:8"
              }
            ],
            "name": "removeOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5132,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5131,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5141,
                  "src": "1187:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5130,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1187:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1186:17:8"
            },
            "returnParameters": {
              "id": 5135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1221:0:8"
            },
            "scope": 5187,
            "src": "1163:93:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5149,
              "nodeType": "Block",
              "src": "1295:38:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5145,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8534,
                          "src": "1317:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1317:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5144,
                      "name": "_removeOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5182,
                      "src": "1301:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1301:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5148,
                  "nodeType": "ExpressionStatement",
                  "src": "1301:27:8"
                }
              ]
            },
            "documentation": null,
            "id": 5150,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "renounceOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5142,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1285:2:8"
            },
            "returnParameters": {
              "id": 5143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1295:0:8"
            },
            "scope": 5187,
            "src": "1260:73:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5165,
              "nodeType": "Block",
              "src": "1385:67:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5158,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5152,
                        "src": "1406:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5155,
                        "name": "_operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5083,
                        "src": "1391:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$5414_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5157,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5439,
                      "src": "1391:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$5414_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$5414_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1391:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5160,
                  "nodeType": "ExpressionStatement",
                  "src": "1391:23:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5162,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5152,
                        "src": "1439:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5161,
                      "name": "OperatorAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5077,
                      "src": "1425:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1425:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5164,
                  "nodeType": "EmitStatement",
                  "src": "1420:27:8"
                }
              ]
            },
            "documentation": null,
            "id": 5166,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5152,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5166,
                  "src": "1359:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5151,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1359:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1358:17:8"
            },
            "returnParameters": {
              "id": 5154,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1385:0:8"
            },
            "scope": 5187,
            "src": "1337:115:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5181,
              "nodeType": "Block",
              "src": "1507:72:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5174,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5168,
                        "src": "1531:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5171,
                        "name": "_operators",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5083,
                        "src": "1513:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$5414_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 5173,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5463,
                      "src": "1513:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$5414_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$5414_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 5175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1513:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5176,
                  "nodeType": "ExpressionStatement",
                  "src": "1513:26:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5178,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5168,
                        "src": "1566:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5177,
                      "name": "OperatorRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5081,
                      "src": "1550:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1550:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5180,
                  "nodeType": "EmitStatement",
                  "src": "1545:29:8"
                }
              ]
            },
            "documentation": null,
            "id": 5182,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5168,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 5182,
                  "src": "1481:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1481:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1480:17:8"
            },
            "returnParameters": {
              "id": 5170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1507:0:8"
            },
            "scope": 5187,
            "src": "1456:123:8",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5186,
            "name": "______gap",
            "nodeType": "VariableDeclaration",
            "scope": 5187,
            "src": "1583:26:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$50_storage",
              "typeString": "uint256[50]"
            },
            "typeName": {
              "baseType": {
                "id": 5183,
                "name": "uint",
                "nodeType": "ElementaryTypeName",
                "src": "1583:4:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 5185,
              "length": {
                "argumentTypes": null,
                "hexValue": "3530",
                "id": 5184,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1588:2:8",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_50_by_1",
                  "typeString": "int_const 50"
                },
                "value": "50"
              },
              "nodeType": "ArrayTypeName",
              "src": "1583:8:8",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr",
                "typeString": "uint256[50]"
              }
            },
            "value": null,
            "visibility": "private"
          }
        ],
        "scope": 5188,
        "src": "504:1108:8"
      }
    ],
    "src": "0:1613:8"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.0",
  "updatedAt": "2020-12-11T05:03:09.349Z",
  "devdoc": {
    "methods": {
      "initialize(address)": {
        "details": "Initializes the contract setting the deployer as the initial owner."
      },
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "userdoc": {
    "methods": {},
    "notice": "allows a single owner to manage a group of operators which may have some special permissions in the contract."
  }
}